使用crontab进行作业调度,在这段时间内关闭计算机时会发生什么?


85

我使用crontab安排了一些任务。

如果在计划cron执行某项操作的时间内关闭计算机或关闭了计算机,将会发生什么情况?

是否在计算机打开后运行每个遗漏的Cron作业,还是忽略了那天的遗漏作业?如果丢失的作业无法恢复,是否可以通过任何方式配置cron以便在计算机重新打开后运行cron?


3
我尝试在网上寻找anacron教程,但找不到任何好的教程。查阅手册页也没有太大帮助。如何更改已经存在的crontab,使其更改为anacron?或其中的任何教程都将非常有帮助
seg.server.fault,2009年

1
我已经编辑了答案,以包括一些示例。希望对您有所帮助!
jeff

Answers:


70

当您的计算机关闭时(否则cron守护程序未运行),cron作业将不会启动。

如果您要在计算机关闭后的那段时间之后运行某些作业,请使用anacron。默认情况下已安装,请参阅“ man anacron”,“ man anacrontab”或文件/ etc / anacrontab了解更多信息。

默认情况下,Ubuntu将anacron用于crontab条目:

/etc/cron.daily
/etc/cron.weekly
/etc/cron.monthly

剩下的crontabs由主cron守护进程处理,特别是:

/etc/crontab
/etc/cron.d
/var/spool/cron

笔记

Anacron本身不是作为守护程序运行,而是依靠系统启动脚本和cron自身运行。

在我正在查看的Ubuntu 8.04框上,/ etc / init.d / anacron在引导时运行,然后每天早上07:30由cron再次运行。

/usr/share/doc/anacron/README.gz中的README信息多于手册页中的信息。

例子

对于简单的“每日”,“每周”,“每月”作业,请在上面的/etc/cron.{daily|weekly|monthly}目录之一中将脚本的副本或符号链接放置到脚本中。Anacron会每天/每周/每月运行一次,如果您的计算机在当天关闭,则“每周”脚本通常会运行,那么它将在下次计算机开启时运行它们。

再举一个例子,假设您在这里有一个脚本:/usr/local/sbin/maint.sh

而且您希望每三天运行一次,/ etc / crontab中的标准条目如下所示:

# m h dom mon dow user  command
0 0 */3 * * root /usr/local/sbin/maint.sh

如果您的计算机在当月3号的00:00不在开机,则该作业要等到6号才能运行。

要在计算机关闭时让作业在第4位运行,而在第3位“错过”运行,则可以在/ etc / anacrontab中使用它(不要忘记从/ etc / crontab中删除该行):

# period delay job-identifier command
3 5 maint-job /usr/local/sbin/maint.sh

上面的“ 5”的“延迟”表示anacron将等待5分钟才能运行此作业。这个想法是为了防止anacron在启动时立即发射东西。


5
默认情况下,Ubuntu使用anacron。
3dinfluence

1
谢谢,3dincluence-调整后的答案,以指示默认ubuntu setip中的anacron处理了哪些crontab。
jeff

2
如果将脚本放在/etc/cron.*/中,而不是拥有自己的crontab条目,则不要包含“。”。在脚本的文件名中。debian和ubuntu使用运行部件来运行此类脚本,默认情况下,运行部件将忽略带有的文件。在文件名中-这样可以避免运行升级后重命名的.dpkg-old和.dpkg-dist版本的脚本。因此,将脚本或符号链接称为“ maint”而不是“ maint.sh”。
cas

默认情况下OpenSUSE从11.2开始使用cronie(当前是Tumbleweed / Leap 42.2)。要使用anacron,请安装cronie-anacron软件包。
palswim

13

这取决于您使用哪个cron调度程序。基本的香草cron守护程序将不会运行由于系统停机而丢失的任务。但是,还有其他专门针对这种情况设计的cron计划程序,可以为您完成此任务。最常见的两个例子是anacronfcron


5

重新启动计算机后,将无法运行在计算机关闭时安排的任务


2

如果在cron作业运行时关闭,则系统将关闭,并且cron作业将停止(或不运行)。

您可以检查的另一种选择是anacron。


2

确实取决于您正在运行的cron deamon。Vixie-cron只会跳过错过的cronjob。fcron会尽快运行错过的克朗。IIRC也是基于vixie-cron的,因此,如果您正在寻找它,则可能需要查看fcron。

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.