如何配置Cron任务让第二个任务比第一个任务晚几分钟执行?
Cron任务调度:让第二个任务延迟执行的实现方案
问题背景
我有两个Cron任务(job1和job2),需要让第二个任务比第一个任务晚几分钟执行,寻求实现指导。初始配置的两个Cron任务如下:
*/5 * * * * /dev/file1/test/test1/fls/mdm/test1.sh */7 * * * * /dev/file1/test/test1/fls/mdm/test2.sh
错误配置分析
执行crontab -e后输入以下内容,出现错误提示“errors in crontab file can't install”:
00 05 * * * * /dev/file1/test/test1/fls/mdm/test1.sh 02 05 * * * * /dev/file1/test/test1/fls/mdm/test2.sh
报错原因很明确:
- Cron的时间字段只有5个(分、时、日、月、周),这里多写了1个星号,格式不符合要求
- 两个任务挤在同一行,Cron要求每个任务单独占一行
可行配置验证
尝试以下配置时可正常运行,但不确定第二个任务是否会按预期延迟触发:
00 */5 * * * /dev/file1/test/test1/fls/mdm/test1.sh 02 */5 * * * /dev/file1/test/test1/fls/mdm/test2.sh
这个配置完全符合需求:
00 */5 * * *表示每5小时的0分执行test1.sh(比如00:00、05:00、10:00等)02 */5 * * *表示每5小时的2分执行test2.sh,刚好比第一个任务晚2分钟触发
如果你的需求是每隔5分钟执行一次,且每次test2.sh都比test1.sh晚2分钟,那应该调整为:
*/5 * * * * /dev/file1/test/test1/fls/mdm/test1.sh 2-59/5 * * * * /dev/file1/test/test1/fls/mdm/test2.sh
解释:
*/5 * * * *每5分钟执行一次test1(0分、5分、10分...)2-59/5 * * * *从第2分钟开始,每5分钟执行一次test2(2分、7分、12分...),完美实现每次晚2分钟的效果
替代实现思路
如果两个任务的执行顺序依赖极强,不想受Cron调度的微小误差影响,可以直接在test1.sh脚本末尾添加:
sleep 120 && /dev/file1/test/test1/fls/mdm/test2.sh
这样test1.sh执行完成后,会等待2分钟(120秒)再启动test2.sh,能保证绝对的延迟顺序。
内容的提问来源于stack exchange,提问作者Jenifer
相关产品推荐
相关产品推荐

