![Anacron,按错过的次数执行作业](https://linux22.com/image/1455411/Anacron%EF%BC%8C%E6%8C%89%E9%94%99%E8%BF%87%E7%9A%84%E6%AC%A1%E6%95%B0%E6%89%A7%E8%A1%8C%E4%BD%9C%E4%B8%9A.png)
如果我安排一项作业每天凌晨 3 点运行,并且连续 3 天都错过了,那么当系统恢复运行时,Anacron 会执行该作业 3 次,还是只执行一次?
如果只运行一次,有没有办法运行几次?
答案1
如果您想确保程序运行的次数与系统停机期间缺失的天数一样多,您可以将命令包含在下面的 bash 脚本中,并使用通常的每日 cron 或 anacron 条目。
首先在文件中记录date.of.lastrun
天数自古以来(即自 1970 年 1 月 1 日以来)程序上次运行的时间。您可以使用以下命令获取今天的值:
echo $(($(date +%s)/86400))
当 cron 运行此脚本时,它会从文件中读取此数字,计算今天的数字,并重复您的命令直到它们匹配,每次更新文件。
let today=$(date +%s)/86400
lastrun=$(<date.of.lastrun)
if [ ! -z "$lastrun" ]
then while [ $lastrun -lt $today ]
do echo "run the command for $(($today-$lastrun)) days back"
# do your command ...
let lastrun+=1
echo $lastrun >date.of.lastrun
done
else echo 'you need to: echo $(($(date +%s)/86400)) >date.of.lastrun'
fi
答案2
这样是不可能的,但是您可以将所需的 cron 作业转换为由 Apache 运行的 CGI 脚本,然后从外部、更稳定的服务器调用它。
或者,您可以将每个作业的执行记录到某个文件中,然后为该日志文件编写解析器,该解析器将执行缺失天数的作业。