Linux crontab 入门:五个字段、常用写法与几个容易忽略的点

举报
yd_49982434 发表于 2026/11/11 20:23:17 2026/11/11
【摘要】 需要让一段脚本每天固定时间自动跑一遍时,crontab 通常是最省事的选择。它是 Linux 上用户级定时任务的配置,由 cron 守护进程按分钟检查并触发。本文整理字段含义、常见写法和配置时容易忽略的几个细节。一行配置里有什么用 crontab -e 编辑当前用户的任务表,每一行是一条任务,前五个字段描述时间,后面是要执行的命令:分 时 日 月 周 命令* * * *...

需要让一段脚本每天固定时间自动跑一遍时,crontab 通常是最省事的选择。它是 Linux 上用户级定时任务的配置,由 cron 守护进程按分钟检查并触发。本文整理字段含义、常见写法和配置时容易忽略的几个细节。

一行配置里有什么

用 crontab -e 编辑当前用户的任务表,每一行是一条任务,前五个字段描述时间,后面是要执行的命令:

分  时  日  月  周  命令
*   *   *   *   *   /path/to/script.sh
  • 分:0-59,每小时的第几分钟
  • 时:0-23,24 小时制
  • 日:1-31,一个月中的第几天
  • 月:1-12,也可用 jan、feb 等缩写
  • 周:0-7,0 和 7 都表示周日,也可用 mon、tue

四个符号可以把字段写得更灵活:* 表示任意值;, 列举多个值;- 表示区间;/ 表示步长。注意「日」和「周」同时被限定时,cron 的匹配是「或」的关系,只写一个通常更不容易出错。

几个常用写法

*/5 * * * *   /usr/bin/python3 /opt/jobs/check.py     # 每 5 分钟
30 2 * * *    /bin/bash /opt/jobs/backup.sh           # 每天 02:30
0 9 * * 1     /bin/bash /opt/jobs/weekly.sh           # 每周一 09:00
0 0 1 * *     /bin/bash /opt/jobs/monthly.sh          # 每月 1 日 00:00
0 3 * * 1-5   /bin/bash /opt/jobs/workday.sh          # 工作日 03:00

最小粒度是分钟,没有「秒」字段;需要秒级触发时,得在脚本里自己循环或改用 timer 一类机制。

容易忽略的几点

命令用绝对路径。 cron 执行时的环境变量比交互登录少很多,PATH 往往只包含少数目录,直接写 python3 或 curl 可能找不到。可以在配置顶部显式写 PATH=/usr/local/bin:/usr/bin:/bin,也可以把命令和脚本都写成全路径。脚本内部如果依赖环境变量,最好在脚本里自行加载。

输出要自己处理。 任务的标准输出和错误输出默认会通过邮件发给该用户;很多机器没配邮件,输出就丢了,排错时看不到任何线索。习惯写成 >> /var/log/myjob.log 2>&1,把日志留下来。

% 需要转义。 在 crontab 的命令部分,未转义的 % 会被当作换行处理,写 date +%Y%m%d 这类命令时要写成 date +\%Y\%m\%d,或者把整段命令放进脚本文件里。

脚本权限与换行符。 直接调用的脚本要有可执行位;从 Windows 编辑后上传的脚本若带 CRLF 换行,解释器可能报奇怪的错,可先用 dos2unix 或编辑器转换。

保存即生效。 用 crontab -e 保存退出后不需要重启服务,新配置会在下一个分钟周期被读到;crontab -l 可以随时查看当前用户的任务表。

任务没跑时怎么查

按顺序看三处通常够用:先用 crontab -l 确认配置确实存在且时间字段写对;再看服务状态,Debian/Ubuntu 上是 systemctl status cron,CentOS/RHEL 系是 systemctl status crond;最后看日志,例如 journalctl -u cron 或 /var/log/syslog 里 grep 任务关键字,确认是否触发、退出码是多少。若命令手工执行正常但定时执行失败,多数情况落在路径、环境变量或权限上。

小结

记住五字段顺序「分 时 日 月 周」,命令写全路径、输出重定向、% 转义,就能覆盖大部分日常定时任务的场景。配置前建议先用一条每分钟执行的测试任务验证链路,再改成正式时间。

本文只整理 Linux 通用的 crontab 语法与配置注意事项,不涉及任何具体账号、环境或实测数据,示例路径与命令请在自己的测试环境中按需替换后再使用。本文由 AI 辅助整理与撰写。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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