如何实现Unix脚本每日8点至20点每隔5分钟循环执行
Unix 定时执行脚本实现方案
方案1:使用系统自带cron服务(推荐)
cron是Unix类系统默认内置的定时任务管理工具,是实现该需求的最优选择。
- 正确的cron规则写法:
兼容大部分新系统的写法:
针对老版本不支持*/5 8-20 * * * /absolute/path/to/your/script.sh*/步长语法的Unix系统(如旧版Solaris、HP-UX等),使用手动枚举分钟的兼容写法:0,5,10,15,20,25,30,35,40,45,50,55 8-20 * * * /absolute/path/to/your/script.sh - 配置步骤:
- 执行
crontab -e进入当前用户的定时任务编辑界面 - 将上述规则粘贴到文件末尾,保存退出后自动生效
- 执行
- 注意事项:
- 给脚本添加可执行权限:
chmod +x /absolute/path/to/your/script.sh - 脚本内涉及的所有文件路径统一使用绝对路径,避免cron运行时环境变量缺失导致执行失败
- 若需要指定运行用户,可将规则写入
/etc/crontab,在字段末尾添加运行用户即可
- 给脚本添加可执行权限:
方案2:脚本循环控制(适配无cron的精简Unix环境)
如果当前环境没有预装cron服务,可以通过常驻后台的循环脚本实现定时触发:
- 新建调度脚本
scheduler.sh,内容如下:
#!/bin/bash while true; do cur_hour=$(date +%H) cur_min=$(date +%M) # 匹配8:00-20:00区间的5整分时刻,包含20:00的末次执行 if (( (cur_hour >= 8 && cur_hour < 20 && cur_min %5 == 0) || (cur_hour == 20 && cur_min == 0) )); then /absolute/path/to/your/script.sh fi # 每次循环睡眠60秒,避免时间漂移漏执行 sleep 60 done
- 给调度脚本添加执行权限:
chmod +x /absolute/path/to/scheduler.sh - 后台启动调度脚本:
nohup /absolute/path/to/scheduler.sh & - 若需要开机自启,可将启动命令写入
/etc/rc.local等开机执行配置文件中
常见失效原因排查
- cron规则小时段误写为
8-19,导致20:00的末次执行被漏掉 - 脚本使用相对路径,cron执行时工作目录不匹配导致找不到文件
- 运行任务的用户没有脚本或脚本涉及资源的访问权限
- 老版本系统不支持
*/5的步长写法,替换为手动枚举分钟的规则即可解决
内容的提问来源于stack exchange,提问作者Neha Dirajlal
相关产品推荐
相关产品推荐

