我目前正在学习 Linux,并且正在使用 cron 和 crontab 进行一些调度作业的练习,但我想知道是否可以限制调度作业的运行次数。从手册页中,我可以看到如何安排作业定期执行,但我还没有找到一种方法来给出具体的执行次数,或者应该停止运行作业的日期。是否有可能做到这一点?
答案1
示例:每小时运行一次的作业,直到“Mon Feb 4 08:30:00 UTC 2019”(Unix 时间戳 1549269000)看起来像
@hourly [ "$( date +\%s )" -lt 1549269000 ] && /path/to/my-script.sh
这项工作从技术上讲仍然是跑步,但它不会执行脚本在给定的时间戳之后。
同样,每小时仅运行五次的作业:
@hourly ( f="$HOME/job.count";c=0;[ -f "$f" ] && read c <"$f"; echo "$(( c + 1 ))" >"$f"; [ "$c" -lt 5 ] ) && /path/to/my-script.sh
上述作业,美化后:
(
f="$HOME/job.count"
c=0
[ -f "$f" ] && read c <"$f"
echo "$(( c + 1 ))" >"$f"
[ "$c" -lt 5 ]
) && /path/to/my-script.sh
这使用状态文件$HOME/job.state
来存储作业已执行的次数。如果文件存在,则将其中的数字读入c
,然后立即写回同一文件,并递增。如果数量小于 5,则执行脚本。
再说一次,这项工作将跑步每小时,无论状态文件的内容如何,但是脚本仅当状态文件中的值小于 5 时才会运行。