it-swarm.cn

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

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

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

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

92
seg.server.fault

当您的计算机关闭时(否则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在启动时立即发射东西。

76
jeff

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

17
Tyler McHenry

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

6
Alan H

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

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

3
KPWINC

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

3
gregf