任务调度是指在预定时间或周期性自动执行特定脚本或系统维护命令的技术。这在日常系统维护(如自动备份、更新日志、执行周期巡检)中极为常见。
Linux 系统中最主流的任务调度工具是 cron。它通过读取 crontab 配置文件来驱动定时任务的执行。
Crontab 时间格式定义
cron 守护进程启动后,会周期性读取被称为 crontab 的定时任务配置文件。要配置一个周期执行的任务,你需要提供六个字段,前五个字段定义了执行的时间周期,第六个字段则是要执行的具体命令。
在配置文件的单行行头,这五个时间字段的具体含义和范围如下:
- 分(MIN,0 - 59):任务在具体哪一分钟开始执行。
- 时(HOUR,0 - 23):任务在具体哪一个小时开始执行。
- 日(DOM,1 - 31):Month 中的某一天(Day of Month)。
- 月(MON,1 - 12):具体哪个月份。
- 周(DOW,0 - 7):Week 中的某一天(Day of Week),其中 0 和 7 都代表星期日。
在设置时间时,经常会使用通配符或特殊操作符:
- 星号
*:代表“任意”或“每一次”。如果在 DOM 字段写*,代表每天都会执行。 - 除号
/:代表“每隔”。例如在 MIN 字段配置*/15,代表每隔 15 分钟执行一次该命令。
时间配置示例
0 0 1 * * /path/to/script.sh:代表每月 1 号的凌晨 0 点 0 分执行一次脚本。0 0 * * 0 /path/to/script.sh:代表每周日(DOW 字段为 0)的凌晨 0 点 0 分执行一次清理脚本。*/5 * * * * /path/to/script.sh:代表每隔 5 分钟执行一次该脚本。
注意
系统级与用户级 Crontab 的区别:
在通过 crontab -e 修改的个人用户任务列表中,配置格式是 5 个时间字段紧跟具体命令;而如果是修改存放于 /etc/cron.d/ 等目录下的系统级配置文件,在 5 个时间字段之后、具体命令之前,必须多写一个“以什么用户身份运行”的字段(如 root),否则系统无法识别。
编辑与管理定时任务
你可以使用 crontab 命令来管理你当前用户的定时任务列表:
- 编辑任务:输入以下命令可以调用终端编辑器直接编辑你的定时配置文件。
crow@opsbox:~$ crontab -e - 列出任务:查看当前用户已配置的定时任务列表。
crow@opsbox:~$ crontab -l
提示
现代化替代方案:Systemd Timers
虽然 cron 简单且无处不在,但现代 Linux 还提供了 systemd 计时器。它通常由一个 .timer 文件定义触发规则,并关联一个 .service 文件定义要运行的命令。它可以记录运行结果、设置错过触发后的补跑策略;CPU 和内存限制则配置在对应的 service 单元中。

