用 crontab 定时跑脚本:从入门到避坑
用 crontab 定时跑脚本,是运维和开发最常用的自动化手段之一。但很多新手第一次用就踩坑:脚本手动能跑,挂到定时里就不动;或者跑了,却在深夜莫名执行了一次。今天把从入门到避坑的经验一次讲清楚。
一、五段式时间写法
crontab 的每条任务由五个时间字段加一条命令组成,从左到右依次是:分、时、日、月、星期。星号代表每一个时间单位都执行。几个常用例子:
每天凌晨两点执行:0 2 * * *
每周一早上八点半执行:30 8 * * 1
每五分钟执行一次:*/5 * * * *
每月1号中午十二点执行:0 12 1 * *
写任务时先把五个位置对齐再填数字,错位是最常见的低级错误。
二、脚本先手动跑通,再挂定时
这是最重要的一条习惯。定时任务跑在后台,出错了你第一时间看不到。所以先在终端里手动执行一遍脚本,确认输出符合预期、退出码正常,再写进 crontab。手动都跑不通的脚本,挂到定时里只会悄悄失败,排查起来更费时间。
三、路径一律用绝对路径
定时任务的工作目录和你登录后的终端不一样,相对路径很容易找不到文件。脚本里读写的文件、引用的其他脚本,都写成从根目录开始的完整路径。如果脚本依赖某个工作目录,就在脚本开头先切换到固定目录,再做后续操作。
四、输出重定向到日志,并定期清理
定时任务没有终端,命令的输出无处可去。建议每条任务都把标准输出和错误输出追加到一个日志文件里,命令末尾做输出重定向,并用 2>&1 把错误输出也合并进来。这样出问题时有据可查。
日志要定期清理或做轮转。定时任务每天跑,日志几个月就能把磁盘写满。可以每月检查一次日志大小,或者使用系统自带的日志轮转工具自动处理。
五、新手最容易踩的四个坑
1 环境变量坑
定时任务的环境变量非常少。终端里能直接用的命令、别名、代理设置,在定时任务里可能都不存在。凡是依赖环境变量的地方,要么在脚本里重新设置,要么写完整路径。遇到手动能跑、定时不行的情况,先查环境变量。
2 权限坑
脚本本身要有可执行权限,脚本读写的文件和目录也要保证运行任务的用户有相应权限。先确认任务是以哪个用户身份运行,再把权限检查一遍。
3 编辑方式坑
用 crontab -e 编辑当前用户的定时任务,系统级的任务才去改系统目录下的文件。服务器多人共用时不要乱改别人的任务,修改前先用 crontab -l 备份一份当前配置。
4 时区坑
服务器的时区可能不是北京时间,任务的执行时间按系统时区计算。先确认系统时间和时区是否正确,再定执行时间,避免出现明明设了早上八点、实际凌晨跑了的乌龙。
六、上线前的验证小技巧
不要一上来就写正式时间。先把执行时间设到未来两三分钟后,保存,等它跑一次,去看日志确认真的执行了、输出也符合预期,再改成正式的执行时间。这个小步骤能帮你提前发现九成问题。
总结一下:时间格式写对、脚本先手动跑通、路径用绝对路径、输出记日志并定期清理、注意环境变量权限编辑方式和时区这四个坑、上线前用两三分钟后的时间验证一次。把这六步做扎实,crontab 就能成为你最省心的自动化工具。
- 点赞
- 收藏
- 关注作者
评论(0)