crontab 定时任务教程：让命令到点自动执行 cron 是 Linux/macOS 上最常用的定时任务工具，可以让你设置在某个固定时间自动执行的命令或脚本，比如每天凌晨备份数据库、每周清理日志、定时同步文件等。本文内容依据 crontab 官方手册（crontab(5)）整理。一、cron 是什么 cron 是一个后台守护进程（daemon），它会按照你配置的时间表，周期性地去执行任务。与之配套的有两个关键概念： crontab：存放每个用户定时任务表的文件，也是管理这些任务的命令名 cron 表达式：用来描述"什么时候执行"的语法二、基本用法查看当前用户的定时任务： crontab -l 编辑（创建/修改）当前用户的定时任务： crontab -e 第一次执行 crontab -e 会让你选择一个编辑器（通常是 nano 或 vim）。删除当前用户的所有定时任务（慎用）： crontab -r 管理 root 的任务需要加 sudo：sudo crontab -e 编辑的是 root 的定时任务表。三、cron 表达式的格式 cron 表达式由5 个时间字段 + 1 个命令组成，每行一条任务：分 时 日 月 星期 要执行的命令 5 个时间字段依次为：字段含义取值范围第 1 个分钟 0 - 59 第 2 个小时 0 - 23 第 3 个日 1 - 31 第 4 个月 1 - 12 第 5 个星期 0 - 7（0 和 7 都代表周日）常见的写法 # 每天 0 点 5 分执行备份脚本 5 0 * * * /home/user/backup.sh # 每周日凌晨 3 点执行 0 3 * * 0 /home/user/weekly.sh # 每个小时执行一次（第 0 分钟） 0 * * * * /home/user/hourly.sh # 每 5 分钟执行一次（分字段用 */5） */5 * * * * /home/user/every5min.sh # 每月 1 号凌晨 2 点 30 分执行 30 2 1 * * /home/user/monthly.sh 四、特殊符号符号含义示例 * 任意值，每个都匹配 * 在小时字段 = 每小时 , 列举多个值 1,15,30 = 第 1、15、30 分钟 - 区间 1-5 = 1 到 5 / 步进 */5 = 每 5 个单位组合示例： # 工作日（周一到周五）上午 9 点执行 0 9 * * 1-5 /home/user/workday.sh # 每小时的第 10、30、50 分钟执行 10,30,50 * * * * /home/user/three_times.sh # 每 2 小时执行一次 0 */2 * * * /home/user/every2hours.sh 五、几个常用的快捷写法除了 5 字段表达式，cron 还提供了一些预定义的关键词（部分系统支持）：快捷词等价表达式含义 @hourly 0 * * * * 每小时 @daily 0 0 * * * 每天 @weekly 0 0 * * 0 每周 @monthly 0 0 1 * * 每月 @reboot — 开机时执行示例： @daily /home/user/backup.sh @reboot /home/user/start_service.sh 六、注意事项路径要写绝对路径：cron 执行时的环境变量和普通登录 shell 不同，PATH 可能非常有限，所以命令里的脚本、程序最好写成绝对路径，例如用 /usr/bin/python3 而不是 python3。命令要能静默执行：cron 没有交互终端，命令里不能有需要手动确认的交互操作。日志输出：默认情况下 cron 会把输出通过邮件发给用户。如果想关掉，可以在命令末尾重定向： 0 3 * * * /home/user/backup.sh > /dev/null 2>&1 这样标准输出和错误输出都被丢弃。更推荐的做法是重定向到日志文件： 0 3 * * * /home/user/backup.sh >> /var/log/backup.log 2>&1 修改后自动生效：用 crontab -e 保存后不需要重启服务，任务立刻生效。脚本要有执行权限：如果写的是 .sh 脚本，记得 chmod +x backup.sh。七、配合 rsync 做自动备份结合上一篇 rsync 教程，可以轻松实现定时自动备份。例如每天凌晨 2 点把文档目录同步到备份盘： crontab -e # 添加这一行： 0 2 * * * rsync -avhP --delete ~/Documents/ /media/backup/Documents/ >> /var/log/backup.log 2>&1 八、总结需求 cron 表达式每天某时刻分 时 * * * 每周某天某时刻分 时 * * 星期每月某天某时刻分 时 日 * * 每 N 分钟 */N * * * * 每 N 小时 0 */N * * * cron 表达式其实只需要记住"分、时、日、月、星期"这个顺序，再结合 *、,、-、/ 四个符号就能应对绝大多数定时需求。配合 rsync、脚本等工具，就能搭建出全自动的备份与维护系统。