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 在启动时立即启动。