使用 crontab 进行作业调度,如果在此期间计算机关闭,会发生什么?

使用 crontab 进行作业调度,如果在此期间计算机关闭,会发生什么?

我使用 crontab 安排一些任务。

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

每个错过的 cron 作业是否在计算机开启后运行,还是当天错过的作业会被忽略?如果错过的作业没有恢复,是否有任何方法可以配置 cron,使其在计算机重新开启后运行错过的任务?

答案1

当您的计算机关闭(或者 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 在启动时立即触发任务。

答案2

这取决于您使用的 cron 调度程序。基本的、普通的 cron 守护程序不会运行由于系统停机而错过的任务。但是,还有其他专门为这种情况设计的 cron 调度程序可以为您执行此操作。最常见的两个示例是阿纳克隆克隆

答案3

计算机关闭时安排的任务将不会在计算机重新开机时运行

答案4

确实取决于你正在运行的 cron 守护进程。Vixie-cron 将跳过错过的 cronjobs。克隆将尽快运行错过的 cron。据我所知,它也是基于 vixie-cron 的,所以如果这就是你要找的东西,你可能需要看看 fcron。

相关内容