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


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

如果我的计算机在cron计划执行某些操作期间关闭或关闭,会发生什么?

每个错过的cron作业是否在计算机打开后运行,或者当天错过的作业被忽略了?如果错过的作业没有恢复,有没有办法配置cron,以便在计算机重新打开后运行错过的任务?


73
2017-08-10 16:22




我尝试在网上寻找anacron教程,但找不到任何好的教程。查看手册页也对我没什么帮助。如何更改已存在的crontab以便将其更改为anacron?或者任何教程都非常有用 - seg.server.fault
我编辑了我的答案,包括一些例子。我希望有所帮助! - jeff


答案:


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

如果您在计算机关闭期间有想要运行的作业,请使用anacron。默认安装,请参阅“man anacron”,“man anacrontab”或文件/ etc / anacrontab以获取更多信息。

默认情况下,Ubuntu对crontab条目使用anacron:

/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中的自述文件比联机帮助页中包含的信息略多一些。

例子

对于简单的“每日”,“每周”,“每月”作业,在上面的/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在启动时立即解决问题。


61
2017-08-10 16:26



默认情况下,Ubuntu使用anacron。 - 3dinfluence
谢谢,3dincluence - 调整的答案,以指示默认的ubuntu setip中的anacron处理哪些crontabs。 - jeff
如果你把脚本放在/etc/cron.*/而不是拥有自己的crontab条目,那么就没有“。”在脚本的文件名中。 debian和ubuntu使用run-parts来运行这样的脚本,默认情况下run-parts将忽略带有的文件。在文件名中 - 这是因为它不运行从升级重命名的.dpkg-old和.dpkg-dist版本的脚本。所以调用脚本或符号链接“maint”而不是“maint.sh”。 - cas
OpenSUSE默认使用cronie 从11.2开始(到Tumbleweed / Leap 42.2)。使用 anacron,安装 cronie-anacron 包。 - palswim


这取决于您使用的cron调度程序。基本的vanilla cron守护程序不会运行由于系统停机而错过的任务。但是,还有其他专门针对此情况设计的cron调度程序,可以为您完成此操作。两个最常见的例子是 anacron的 和 fcron


12
2017-08-10 16:27





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


5
2017-08-10 16:26





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

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


2
2017-08-10 16:27





真的取决于你正在运行的cron deamon。 Vixie-cron将跳过错过的cronjobs。 fcron 将尽快运行错过的crons。 IIRC它也基于vixie-cron,所以如果你正在寻找的话,你可能想看看fcron。


2
2017-08-10 16:35