如何防止atd运行过去的作业?

如何防止atd运行过去的作业?

at 守护进程是一个很棒的工具!但是,如果作业安排在上午 8:00 并且计算机当时已关闭,则每当计算机启动时,at 都会运行该作业。我想做的是,如果时间过去了,就停止它运行该作业。我已经搜索了手册页和在线,但要么没有答案,要么找不到答案。我正在使用 Arch,但据我所知,它在各个发行版中都非常相似。

任何帮助深表感谢!

答案1

一份工作什么时候会成为过去的工作?如果您在 7:59:50 打开系统并且at守护进程在 启动8:00:01,那么该作业是否应该执行?如果守护进程在 7:59:59 启动但需要两秒钟来读取其所有文件怎么办?

你决定!开始工作时检查时间,如果时间已过则中止。

export execute_by_date=$(date +%s 'tomorrow 8:01')
at tomorrow 8:00
[ "$(date +%s)" -le "$execute_by_date" ] || exit
do_stuff

答案2

您可以编写一个初始化脚本,在关机或重新启动时取消所有预定的工作。

我不确定 Arch-Linux - 是否有/etc/sysconfig/at类似的东西?也许这只是一个你必须翻转的配置开关......

答案3

我投票给cron守护进程。

如果您需要在一天中的特定时间运行它,但不是每天的同一时间运行它,我会创建一个 crontab,每天范围内包含一个条目,并具有特定的执行时间:

一些例子取自crontab(5)

# run five minutes after midnight, every day
5 0 * * *       command
# run at 2:15pm on the first of every month
15 14 1 * *     command
# run at 10 pm on weekdays
0 22 * * 1-5    command

答案4

你想要的是 cron 守护进程。它完全符合您的要求。

为您最喜爱的搜索引擎提供信息计划任务守护进程你有一堆手册和说明。man cron并且man crontab也很有帮助。

相关内容