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

如果在计划cron做某事的时间内关闭计算机或关闭计算机,会发生什么情况?

每个遗漏的cron作业是否都会发生?在打开计算机后运行,还是忽略了当天错过的工作?如果丢失的作业无法恢复,是否有任何方法可以配置cron以便在计算机重新开机后运行丢失的任务?

评论

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

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

#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。

#5 楼

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