【问题标题】:Linux doesn't execute scheduled job later than schulded timeLinux 不会在预定时间之后执行预定作业
【发布时间】:2015-04-01 12:46:07
【问题描述】:

我是 Linux cron 作业的初学者。

要求:

记录员工的出勤情况。每天上午 10 点,Jar 应该执行并要求登录以记录他/她的存在。

定时任务

我创建了一个 cron 作业并将其放置在 /etc/cron.d/ 并具有以下行。

0 10 * * * /home/user/Documents/attendance.sh

如果系统在上午 10 点之前启动,则会出现登录屏幕 UI,但如果用户迟到并在上午 10 点之后启动系统,则不会显示登录屏幕 UI。

所以即使用户在上午 10 点之后登录,它也应该执行 JAR。

另外,如果有其他方法可以实现这一目标,请告诉我。 请指导。

谢谢,
安库尔

【问题讨论】:

    标签: linux scheduled-tasks crontab cron-task


    【解决方案1】:

    我想到了几个选择。

    1如果您希望在登录时为每个用户运行attendance.sh,您可以将其添加到系统范围的登录shell rc 文件中,可能是/etc/profile

    2如果可用,您可以使用anacron,它非常适合并非一直运行的系统。您可以安排attendance.sh 每天在登录后的特定时间运行。

    这些替代品的行为会有所不同。 1 将在每次登录时运行,因此一天几次或几天内只运行一次,具体取决于用户是每天登录和注销、每天几次还是在下班时保持登录状态。 2 将在用户登录的每一天运行(假设他们至少在您指定的延迟时间内保持登录状态)。

    如果您的要求更严格,请说“对所有登录的用户在 10 点运行,否则在迟到的用户登录时运行”。你可以做一些事情,但这样做需要一些额外的工作。

    添加了以下提问者评论

    正如我在讨论 12 有何不同时所提到的,1 可能存在问题如果用户不只是在工作日开始时登录并在结束时注销。在我看来,您真正追求的是一个绑定到窗口管理器的应用程序。我没有使用窗口管理器事件触发脚本的经验,但肯定可以这样做,例如Run script on screen lock/unlock。您可能需要根据您的需求和您拥有的系统类型进行一些研究。需要记住的一件事是,适用于并非每天注销的用户的解决方案可能会对每天多次注销的用户产生适得其反的效果。解决方案 2 可能是针对您的问题的最简单直接的解决方案,但您可能需要更精细的方法来处理边缘情况以及(可能)监控员工绩效的位置。

    【讨论】:

    • 我考虑第一个版本,在这种情况下,如果用户保持他的机器开机并在第二天来,那么他将无法登录以开始他的工作。在这种情况下,应该会弹出登录屏幕。所以这就是我想每天上午 10 点执行的原因
    • @AnkurRaiyani 我已经扩展了我的答案以回应您的评论。
    【解决方案2】:

    您可以让脚本每小时运行一次。脚本会检查时间,如果是 10 点或之后,它会检查用户今天是否登录,如果没有则要求他登录。所以你也可以记录登录时间。

    编辑:你可以把你的脚本放在 /etc/cron.hourly

    【讨论】:

      猜你喜欢
      • 2022-12-21
      • 1970-01-01
      • 2023-03-22
      • 2019-01-02
      • 1970-01-01
      • 2022-08-17
      • 2021-09-02
      • 2018-09-29
      • 2018-01-29
      相关资源
      最近更新 更多