我有一个不同时间的 crontab 来执行某些任务,例如每分钟、每 10 分钟、1 小时、每天...我有一个问题,当其中一些 cron 在同一时间重合时,例如,当 10 分钟时执行,还执行 1 分钟 cron 并且这个 cron 并行执行...但我想按顺序执行,例如 1 分钟内的所有作业,以及 10 分钟内的所有作业...我该怎么做?
答案1
对于 cron 本身,我认为你真的不能。我可能会用脚本来解决这个问题:每分钟从 cron 执行一个脚本,然后以与该脚本不同的时间间隔运行任务。像这样的东西:
crontab 条目:
* * * * * /path/to/main_script.sh
和main_script.sh
:
#!/bin/sh
mins=$[ $(date +%s) / 60 ] # current time, rounded to minutes
run_1min_task.sh
if [ $[ $mins % 10 ] -eq 0 ] ; then # mins divisible by 10 ?
run_10min_task.sh # run the every 10 min task
fi
if [ $[ $mins % 60 ] -eq 0 ] ; then # same for 1 hour
run_1hour_task.sh
fi
if [ $[ $mins % 1440 ] -eq 0 ] ; then # 1440 = 24*60
run_daily_task.sh
fi
如果您关心每天一次的任务在什么时间运行,则需要考虑时区,上面的命令应该在 00:00 UTC 运行它。与零以外的其他值进行比较以更改它。
另请注意,如果您的任务可能需要超过 1 分钟,您需要确保它们可以同时运行,或者阻止它们这样做。