Cron Cheatsheet - Cron Expression & Task Scheduling Reference
写 Cron 定时任务必备的表达式速查表,从基础格式到踩坑要点,按场景分类整理,直接复制改参数。
Back to SysOps表达式格式 6
* * * * * command标准格式共 5 个字段:分 时 日 月 周
分钟 (0-59)第 1 个字段,每小时内的第几分钟
小时 (0-23)第 2 个字段,一天内的第几小时,0 表示午夜
日 (1-31)第 3 个字段,每月的第几天
月 (1-12)第 4 个字段,每年的第几月
周 (0-7)第 5 个字段,0 和 7 都是周日,1-6 为周一到周六
特殊符号 6
*任意值,表示该字段不做限制
*/N每 N 个单位执行一次,如 */5 表示每 5 分钟
A-B范围,如 9-17 表示 9 到 17 之间每个单位
A,B,C列表,如 1,3,5 表示周一、三、五
A-B/N范围内步进,如 1-10/2 表示 1,3,5,7,9
L最后,如 0 0 L * * 表示每月最后一天(部分实现支持)
特殊时间宏 6
@reboot系统启动时执行一次,常用于启动后台服务
@yearly / @annually每年执行一次,等价于 0 0 1 1 *
@monthly每月执行一次,等价于 0 0 1 * *
@weekly每周执行一次,等价于 0 0 * * 0
@daily / @midnight每天执行一次,等价于 0 0 * * *
@hourly每小时执行一次,等价于 0 * * * *
常用示例 8
*/5 * * * * command每 5 分钟执行一次
0 * * * * command每小时整点执行
0 3 * * * command每天凌晨 3 点执行
0 0 * * 1 command每周一凌晨执行
0 0 1 * * command每月 1 号凌晨执行
0 9-18 * * 1-5 command工作日 9 点到 18 点每小时执行
*/30 * * * * command每 30 分钟执行一次
0 0 * * 0 command每周日午夜执行
环境变量 6
SHELL=/bin/bash指定 cron 执行命令时使用的 shell
PATH=/usr/local/bin:/usr/bin:/bin设置命令搜索路径,cron 默认 PATH 很精简
MAILTO="admin@example.com"任务输出通过邮件发送给指定地址
MAILTO=""关闭邮件通知,不发送任何输出
HOME=/home/user设置执行时的 HOME 目录
CRON_TZ=Asia/Shanghai设置 cron 使用的时区
权限管理 6
/etc/cron.allow白名单,仅此文件中的用户可使用 crontab
/etc/cron.deny黑名单,此文件中的用户禁止使用 crontab
crontab -u user -eroot 编辑指定用户的 crontab
crontab -u user -l查看指定用户的定时任务
crontab -u user -r删除指定用户的所有定时任务
ls /var/spool/cron/查看所有用户的 crontab 文件位置
故障排查 5
grep CRON /var/log/syslog查看 Debian/Ubuntu 的 cron 执行日志
grep cron /var/log/cron查看 RHEL/CentOS 的 cron 执行日志
systemctl status crond检查 cron 服务状态(RHEL/CentOS)
systemctl status cron检查 cron 服务状态(Debian/Ubuntu)
* * * * * echo test >> /tmp/cron-test 2>&1调试:每分钟写一行测试 cron 是否工作
💡 Tips
- cron 环境变量与交互 shell 不同,PATH 可能不完整,命令找不到时在脚本里显式 export PATH。
- 命令建议用绝对路径,避免 cron 环境找不到可执行文件,尤其是 node/python 等解释器。
- 输出默认会发邮件,建议重定向到日志文件,如 command >> /var/log/job.log 2>&1。
- 周和日同时指定时是"或"关系不是"与"关系,0 0 13 * 5 表示每月 13 号或每周五执行。
- 修改 crontab 后无需重启 cron 服务,保存即自动生效,但脚本本身需要确保有执行权限。
- cron.allow 和 cron.deny 同时存在时只看 allow,两者都不存在时取决于发行版默认策略。