Cron 最适合用于调度重复性任务。一次性任务的调度可以使用相关的 at 工具来完成。
分 时 日 月 周
* * * * * 要执行的命令
┬ ┬ ┬ ┬ ┬
│ │ │ │ └─ 星期几 (0=周日 .. 6=周六)
│ │ │ └────── 月份 (1..12)
│ │ └─────────── 日期 (1..31)
│ └──────────────── 小时 (0..23)
└───────────────────── 分钟 (0..59)
| 字段 | 范围 | 特殊字符 |
|---|---|---|
| 分钟 | 0 - 59 | , - * / |
| 小时 | 0 - 23 | , - * / |
| 日期 | 1 - 31 | , - * ? / L W |
| 月份 | 1 - 12 | , - * / |
| 星期几 | 0 - 6 | , - * ? / L # |
| 示例 | 描述 |
|---|---|
*/15 * * * * |
每 15 分钟 |
0 * * * * |
每小时 |
0 */2 * * * |
每 2 小时 |
15 2 * * * |
每天凌晨 2:15 |
15 2 * * ? |
每天凌晨 2:15 |
10 9 * * 5 |
每周五上午 9:10 |
0 0 * * 0 |
每周日午夜 |
15 2 * * 1L |
每月最后一个周一的凌晨 2:15 |
15 0 * * 4#2 |
每月第二个周四的凌晨 00:15 |
0 0 1 * * |
每月 1 号 (每月) |
0 0 1 1 * |
每年 1 月 1 号 (每年) |
@reboot |
每次重启时 (非标准) |
| 特殊字符串 | 含义 |
|---|---|
| @reboot | 运行一次,在系统启动时 (非标准) |
| @yearly | 每年运行一次,"0 0 1 1 *" (非标准) |
| @annually | (与 @yearly 相同) (非标准) |
| @monthly | 每月运行一次,"0 0 1 * *" (非标准) |
| @weekly | 每周运行一次,"0 0 * * 0" (非标准) |
| @daily | 每天运行一次,"0 0 * * *" (非标准) |
| @midnight | (与 @daily 相同) (非标准) |
| @hourly | 每小时运行一次,"0 * * * *" (非标准) |
| - | - |
|---|---|
crontab -e |
编辑或创建 crontab 文件(如果尚不存在)。 |
crontab -l |
显示 crontab 文件。 |
crontab -r |
删除 crontab 文件。 |
crontab -v |
显示上次编辑 crontab 文件的时间。 (非标准) |
| 特殊字符 | 描述 |
|---|---|
星号(*) |
匹配字段中的所有值或任何可能的值。 |
连字符(-) |
用于定义范围。例如:第五个字段(星期几)中的 1-5 表示每个工作日,即周一到周五。 |
斜杠 (/) |
第一个字段(分钟)/15 表示每十五分钟或范围的增量。 |
逗号 (,) |
用于分隔项目。例如:第二个字段(小时)中的 2,6,8 表示在凌晨 2 点、早上 6 点和早上 8 点执行。 |
L |
仅允许用于日期或星期几字段,星期几字段中的 2L 表示每月的最后一个周二。 |
井号 (#) |
仅允许用于星期几字段,其后必须跟随 1 到 5 范围内的数字。例如,4#1 表示给定月份的“第一个周四”。 |
问号 (?) |
可以代替 '*',并允许用于日期和星期几字段。在 cron 表达式中,使用限制为日期或星期几字段之一。 |