用 crontab 定时跑脚本:从入门到避坑

举报
yd_28502004 发表于 2026/10/29 09:15:54 2026/10/29
【摘要】 用 crontab 定时跑脚本,是运维和开发最常用的自动化手段之一。但很多新手第一次用就踩坑:脚本手动能跑,挂到定时里就不动;或者跑了,却在深夜莫名执行了一次。今天把从入门到避坑的经验一次讲清楚。一、五段式时间写法crontab 的每条任务由五个时间字段加一条命令组成,从左到右依次是:分、时、日、月、星期。星号代表每一个时间单位都执行。几个常用例子:每天凌晨两点执行:0 2 * * *每周一...

用 crontab 定时跑脚本,是运维和开发最常用的自动化手段之一。但很多新手第一次用就踩坑:脚本手动能跑,挂到定时里就不动;或者跑了,却在深夜莫名执行了一次。今天把从入门到避坑的经验一次讲清楚。

一、五段式时间写法

crontab 的每条任务由五个时间字段加一条命令组成,从左到右依次是:分、时、日、月、星期。星号代表每一个时间单位都执行。几个常用例子:

每天凌晨两点执行:0 2 * * *
每周一早上八点半执行:30 8 * * 1
每五分钟执行一次:*/5 * * * *
每月1号中午十二点执行:0 12 1 * *

写任务时先把五个位置对齐再填数字,错位是最常见的低级错误。

二、脚本先手动跑通,再挂定时

这是最重要的一条习惯。定时任务跑在后台,出错了你第一时间看不到。所以先在终端里手动执行一遍脚本,确认输出符合预期、退出码正常,再写进 crontab。手动都跑不通的脚本,挂到定时里只会悄悄失败,排查起来更费时间。

三、路径一律用绝对路径

定时任务的工作目录和你登录后的终端不一样,相对路径很容易找不到文件。脚本里读写的文件、引用的其他脚本,都写成从根目录开始的完整路径。如果脚本依赖某个工作目录,就在脚本开头先切换到固定目录,再做后续操作。

四、输出重定向到日志,并定期清理

定时任务没有终端,命令的输出无处可去。建议每条任务都把标准输出和错误输出追加到一个日志文件里,命令末尾做输出重定向,并用 2>&1 把错误输出也合并进来。这样出问题时有据可查。

日志要定期清理或做轮转。定时任务每天跑,日志几个月就能把磁盘写满。可以每月检查一次日志大小,或者使用系统自带的日志轮转工具自动处理。

五、新手最容易踩的四个坑

1 环境变量坑
定时任务的环境变量非常少。终端里能直接用的命令、别名、代理设置,在定时任务里可能都不存在。凡是依赖环境变量的地方,要么在脚本里重新设置,要么写完整路径。遇到手动能跑、定时不行的情况,先查环境变量。

2 权限坑
脚本本身要有可执行权限,脚本读写的文件和目录也要保证运行任务的用户有相应权限。先确认任务是以哪个用户身份运行,再把权限检查一遍。

3 编辑方式坑
用 crontab -e 编辑当前用户的定时任务,系统级的任务才去改系统目录下的文件。服务器多人共用时不要乱改别人的任务,修改前先用 crontab -l 备份一份当前配置。

4 时区坑
服务器的时区可能不是北京时间,任务的执行时间按系统时区计算。先确认系统时间和时区是否正确,再定执行时间,避免出现明明设了早上八点、实际凌晨跑了的乌龙。

六、上线前的验证小技巧

不要一上来就写正式时间。先把执行时间设到未来两三分钟后,保存,等它跑一次,去看日志确认真的执行了、输出也符合预期,再改成正式的执行时间。这个小步骤能帮你提前发现九成问题。

总结一下:时间格式写对、脚本先手动跑通、路径用绝对路径、输出记日志并定期清理、注意环境变量权限编辑方式和时区这四个坑、上线前用两三分钟后的时间验证一次。把这六步做扎实,crontab 就能成为你最省心的自动化工具。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。