如何防止atd跑过去的工作?


9

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

任何帮助深表感谢!

Answers:


7

工作什么时候成为过去的工作?如果您在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

您可以编写一个init脚本,以在关机或重新启动时取消所有待命的工作。

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


我认为这是最好的解决方案,请at在启动之前在at启动时刷新队列。
bahamat 2012年

这正是我期望的/应该的!不幸的是/etc/sysconfig/,Arch中根本没有目录...手册页中列出的文件都不是配置文件。
Elmer 2012年

@Elmer我只是用Google搜索了一下,并阅读了有关arch linux的文章。'/etc/rc.d/atd'似乎是那里at-daemon的初始化脚本。看看那里是否可以看到它解析了一些配置文件。如果您不走运,则必须使用自己的init脚本(例如,命名它atclear并在之前运行它atd)。
尼尔斯2012年

2

我的投票是关于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

0

您想要的是cron守护程序。它正是您想要的。

为您最喜欢的cron守护程序搜索引擎供稿,您将获得大量手册和说明。man cron并且man crontab也很有帮助。


感谢您的帮助,但cron无法解决我的问题。我需要在一天的特定时间运行脚本,但不必每天都在同一时间运行。
Elmer 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.