如果我的计算机在cron计划执行某些操作期间关闭或关闭,会发生什么?
每个错过的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在启动时立即解决问题.