如何设置每两个半小时运行一次的cronjob定时任务
你之前配置的30 */2 * * *实际含义是每2小时的第30分钟执行一次,执行时间点为0:30、2:30、4:30……相邻两次执行间隔为2小时,不符合2.5小时的需求,因此无法达到预期。以下是3种可行的实现方案:
方案1:组合两条cron规则(无额外依赖,原生cron支持)
注意:因为24小时不是2.5小时的整数倍,原生cron无法实现完全无跨天偏移的固定2.5小时间隔。如果你能接受固定时间点执行、且当日相邻两次执行间隔都是2.5小时,可以用以下两条规则,直接添加到crontab即可:
30 0,5,10,15,20 * * * 你的执行命令 0 3,8,13,18 * * * 你的执行命令
执行时间点为:0:30 → 3:00 → 5:30 → 8:00 → 10:30 → 13:00 → 15:30 → 18:00 → 20:30,当日最后一次执行到次日0:30的间隔为4小时,适合对跨天间隔要求不高的场景。
方案2:脚本判断执行(支持严格无偏移的2.5小时间隔)
先创建执行判断脚本,例如run_every_150min.sh:
#!/bin/bash # 间隔150分钟即9000秒 interval=9000 now=$(date +%s) if [ $((now % interval)) -eq 0 ]; then # 替换为你实际要执行的命令路径 /path/to/your/task fi
给脚本添加执行权限:chmod +x /path/to/run_every_150min.sh
再在crontab中添加一条规则,每分钟调用一次判断脚本:
* * * * * /path/to/run_every_150min.sh
这个方案的好处是可以实现严格的每150分钟执行一次,不受跨天影响,后续调整间隔也只需要修改脚本中的interval值即可。
方案3:systemd timer配置(Linux系统通用,易排查维护)
如果你的系统使用systemd,这种非整小时间隔的定时任务用timer配置可读性更高,也方便后续查询执行日志和异常排查:
- 先创建service文件
/etc/systemd/system/your-custom-task.service:
[Unit] Description=自定义2.5小时间隔执行任务 [Service] Type=oneshot # 替换为你实际要执行的命令路径 ExecStart=/path/to/your/task
- 再创建对应的timer文件
/etc/systemd/system/your-custom-task.timer:
[Unit] Description=每2.5小时执行一次自定义任务 [Timer] # 系统启动5分钟后开始第一次执行 OnBootSec=5min # 每次执行完成后间隔150分钟再执行下一次 OnUnitActiveSec=150min Persistent=true [Install] WantedBy=timers.target
- 重载配置并启用timer:
systemctl daemon-reload systemctl enable --now your-custom-task.timer
内容的提问来源于stack exchange,提问作者uvindu sri
相关产品推荐
相关产品推荐

