Anacron,按错过的次数执行作业

Anacron,按错过的次数执行作业

如果我安排一项作业每天凌晨 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 脚本,然后从外部、更稳定的服务器调用它。

或者,您可以将每个作业的执行记录到某个文件中,然后为该日志文件编写解析器,该解析器将执行缺失天数的作业。

相关内容