Crontab(Cron Table)是Linux系统中用于周期性执行定时任务的核心工具,通过crond(Cron守护进程)监听并执行预设任务。它广泛应用于日志清理、数据备份、脚本运行等场景,支持用户级和系统级任务配置。
Crontab的每条任务由6个字段组成(部分系统支持@特殊字符串简化),格式如下:
* * * * * command_to_execute
│ │ │ │ │
│ │ │ │ └─── 星期(0-7,0和7均代表周日)
│ │ │ └───── 月份(1-12)
│ │ └─────── 日(1-31)
│ └───────── 小时(0-23)
└─────────── 分钟(0-59)
*、,、-、/),用于灵活设置时间间隔。/usr/bin/ls而非ls),避免因cron环境变量缺失导致任务失败。| 字段 | 取值范围 | 说明 |
|---|---|---|
| 分钟 | 0-59 | 每分钟的刻度 |
| 小时 | 0-23 | 24小时制 |
| 日(月份中) | 1-31 | 需注意月份的实际天数 |
| 月 | 1-12 | 或使用英文缩写(如Jan) |
| 星期 | 0-7(0和7均代表周日) | 或使用英文缩写(如Sun) |
*:匹配所有可能值(如* * * * *表示每分钟执行)。,:分隔多个离散值(如1,15,30 * * * *表示每小时的第1、15、30分钟执行)。-:指定连续范围(如8-17 * * * *表示每天8点到17点每小时执行)。/:设置间隔频率(如*/5 * * * *表示每5分钟执行一次,等价于0,5,10,...,55 * * * *)。为简化时间配置,Crontab支持以下预定义特殊字符串(替代前5个时间字段):
| 字符串 | 含义 | 等效时间表达式 |
|---|---|---|
@reboot |
系统启动时执行一次 | — |
@yearly |
每年执行一次 | 0 0 1 1 * |
@annually |
同@yearly |
0 0 1 1 * |
@monthly |
每月执行一次 | 0 0 1 * * |
@weekly |
每周执行一次 | 0 0 * * 0 |
@daily |
每天执行一次 | 0 0 * * * |
@midnight |
同@daily |
0 0 * * * |
@hourly |
每小时执行一次 | 0 * * * * |
示例:@daily /usr/bin/clear_temp表示每天午夜清空临时文件。
crontab -e
执行后会打开默认编辑器(如vi/nano),添加或修改任务后保存即可生效。
crontab -l
列出当前用户所有的定时任务。
crontab -r
注意:此操作会删除所有任务,无确认提示。若需确认,可添加-i参数(crontab -i -r)。
crontab -u username -e
例如,编辑tom用户的crontab:sudo crontab -u tom -e。
/home/user/backup.sh),避免因cron环境变量(如PATH)不同导致找不到命令。$HOME、$PATH),若任务依赖环境变量,需在命令前显式设置(如在脚本开头添加export PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin)。/etc/crontab或/etc/cron.d/下的文件。/path/to/command > /tmp/log.txt 2>&1)。