Cron Cheatsheet - Cron Expression & Task Scheduling Reference

写 Cron 定时任务必备的表达式速查表,从基础格式到踩坑要点,按场景分类整理,直接复制改参数。

SysOps·43 commands·Last updated 2026-07-21
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 -e
root 编辑指定用户的 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,两者都不存在时取决于发行版默认策略。