如果在计划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
其余的crontab留给主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在启动时立即将其发射出去。
评论
默认情况下,Ubuntu使用anacron。
– 3dinfluence
09年8月10日在16:29
谢谢,3dincluence-调整后的答案,以指示默认ubuntu setip中的anacron处理了哪些crontab。
– jeff
09年8月10日在16:34
如果将脚本放在/etc/cron.*/中,而不是拥有自己的crontab条目,则不要包含“。”。在脚本的文件名中。 debian和ubuntu使用运行部件来运行此类脚本,默认情况下,运行部件将忽略带有的文件。在文件名中-这样可以避免运行升级后重命名的.dpkg-old和.dpkg-dist版本的脚本。因此,将脚本或符号链接称为“ maint”,而不是“ maint.sh”。
–cas
09年8月10日在21:58
默认情况下,OpenSUSE从11.2开始使用cronie(当前是Tumbleweed / Leap 42.2)。要使用anacron,请安装cronie-anacron软件包。
–palswim
17年5月18日在23:23
Fedora,RedHat和其他派生使用cronie(而不是cron),其中包含anacron作为扩展(软件包cronie-anacron)。
–德克
20年1月20日在13:11
#2 楼
这取决于您使用的cron调度程序。基本的香草cron守护程序将不会运行由于系统停机而丢失的任务。但是,还有其他专门针对这种情况设计的cron计划程序,可以为您完成此任务。最常见的两个例子是anacron和fcron。#3 楼
重新启动计算机后,计算机关闭时安排的任务将不会运行#4 楼
如果在cron作业运行时关闭,则系统将关闭,并且cron作业将停止(或不运行)。您可以检查的另一种方法是anacron。
评论
我尝试在网上寻找anacron教程,但找不到任何好的教程。查阅手册页也没有太大帮助。如何更改已经存在的crontab使其更改为anacron?或其中的任何教程都将非常有用我已经编辑了答案,以包括一些示例。希望对您有所帮助!