使用crontab进行作业调度,那段时间电脑关机会怎样?

seg*_*ult 123 linux ubuntu cron

我使用 crontab 安排一些任务。

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

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

jef*_*eff 102

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

如果您希望在计算机关闭期间事后运行作业,请使用 anacron。默认情况下安装,请参阅“man anacron”、“man anacrontab”或文件 /etc/anacrontab 以获取更多信息。

Ubuntu 默认使用 anacron 作为 crontab 条目:

/etc/cron.daily
/etc/cron.weekly
/etc/cron.monthly
Run Code Online (Sandbox Code Playgroud)

剩下的 crontab 由主 cron 守护进程处理,特别是:

/etc/crontab
/etc/cron.d
/var/spool/cron
Run Code Online (Sandbox Code Playgroud)

笔记

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
Run Code Online (Sandbox Code Playgroud)

如果您的计算机在该月 3 日的 00:00 未打开,则作业将在 6 日之前运行。

要在计算机关闭时在 4 日运行该作业并“错过”在 3 日运行,您可以在 /etc/anacrontab 中使用它(不要忘记从 /etc/crontab 中删除该行):

# period delay job-identifier command
3 5 maint-job /usr/local/sbin/maint.sh
Run Code Online (Sandbox Code Playgroud)

上面“5”的“延迟”是指anacron在运行这个作业前会等待5分钟。这个想法是为了防止 anacron 在启动时立即启动。

  • 默认情况下,Ubuntu 使用 anacron。 (5认同)
  • 如果您将脚本放在 /etc/cron.*/ 中而不是拥有自己的 crontab 条目,则不要有“。” 在脚本的文件名中。debian 和 ubuntu 使用 run-parts 来运行此类脚本,默认情况下,run-parts 将忽略扩展名为 . 在文件名中 - 这样它就不会运行从升级重命名的脚本的 .dpkg-old 和 .dpkg-dist 版本。所以将脚本或符号链接称为“maint”而不是“maint.sh”。 (4认同)

小智 22

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


Ala*_*n H 7

计算机关闭时计划的任务不会在计算机重新打开时运行


KPW*_*INC 5

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

您可以检查的一种替代方案是 anacron。