Linux crontab 入门:五个字段、常用写法与几个容易忽略的点
需要让一段脚本每天固定时间自动跑一遍时,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 辅助整理与撰写。
- 点赞
- 收藏
- 关注作者
评论(0)