Crontab任务提前执行问题排查与修复咨询
Crontab任务提前执行问题排查与修复咨询
嗨,我来帮你理清楚这个问题~
首先得说,你遇到的其实不是“提前执行”,而是对cron的*/10规则理解有点偏差啦。
为什么会出现这种情况?
cron里的*/10 * * * *规则,意思是匹配分钟数能被10整除的时间点——也就是每个小时的0分、10分、20分、30分、40分、50分这几个时间点执行任务。它不是从你添加任务的那一刻开始计算“每隔10分钟”,而是跟着系统时间的整点10分钟间隔走的。
举个例子:如果你是在13分的时候添加的这个cron任务,那cron会找到接下来第一个符合条件的时间点——20分,刚好距离你添加的时间是7分钟,这就会让你觉得“怎么才过7分钟就运行了”。
怎么调整到你想要的效果?
分两种情况来处理:
如果只是想让任务严格在每小时的10倍数分钟执行(0、10、20...),那当前的规则其实是正常的,刚才的“7分钟后运行”只是添加任务时刚好卡在了两个时间点之间的巧合,之后它就会稳定在每10分钟的整倍数点执行了。
如果确实想要从你添加任务的时间开始,严格每隔10分钟执行一次(比如13分添加,就13、23、33...分执行),那cron的原生规则做不到这一点,你可以换个思路:
- 写一个循环脚本,在脚本里执行完任务后sleep 600秒(10分钟),然后用后台运行的方式启动它,比如:
其中nohup bash /home/myuser/mydir/mybashscript_loop.sh &mybashscript_loop.sh的内容大概是:#!/bin/bash while true; do # 执行你的任务逻辑 bash /home/myuser/mydir/mybashscript.sh # 休眠10分钟 sleep 600 done - 或者用systemd服务来管理这个循环脚本,保证它能持续后台运行,就算系统重启也能自动启动。
- 写一个循环脚本,在脚本里执行完任务后sleep 600秒(10分钟),然后用后台运行的方式启动它,比如:
备注:内容来源于stack exchange,提问作者Erikli
相关产品推荐
相关产品推荐

