一、什么是定时任务¶
定时任务用于在 Linux 中周期性执行命令或脚本,例如:
- 同步系统时间
- 定时备份
- 系统巡检
- 周期性清理或统计任务
它可以理解成 Linux 里的“闹钟服务”,到了指定时间自动执行预设动作。
二、从服务视角理解定时任务¶
原始笔记把服务学习过程总结为几个环节:
- 部署:先安装服务或软件
- 配置:学会通过命令或配置文件使用它
- 优化与注意事项:考虑安全、日志、输出和可维护性
- 排障:会看错误提示、会看日志、必要时让服务输出更多调试信息
- 其他:做好监控、备份、日志收集和统一认证
这套思路也非常适合学习 cron。
三、部署 cron 服务¶
Linux 中常见的定时任务软件包名是 cronie,服务进程名是 crond。
检查是否安装:
$ rpm -qa cronie
$ rpm -ql cronie
检查服务状态:
$ systemctl status crond
3.1 常见目录与文件¶
| 路径 | 说明 |
|---|---|
/var/spool/cron/ |
各用户定时任务配置文件目录 |
crontab |
管理当前用户定时任务的命令 |
/var/log/cron |
定时任务日志 |
/etc/crontab |
系统级定时任务配置文件,日常不太推荐直接改 |
/etc/cron.hourly/ |
每小时执行的系统任务目录 |
/etc/cron.daily/ |
每天执行的系统任务目录 |
/etc/cron.weekly/ |
每周执行的系统任务目录 |
/etc/cron.monthly/ |
每月执行的系统任务目录 |
四、crontab 常用命令¶
crontab 用于对当前用户的定时任务进行增删改查。
| 命令 | 说明 |
|---|---|
crontab -e |
编辑当前用户的定时任务 |
crontab -l |
查看当前用户的定时任务 |
查看当前机器上的定时任务:
$ crontab -l
编辑当前用户定时任务:
$ crontab -e
从本质上看,crontab -e 实际就是在编辑当前用户对应的文件,例如 root 用户常对应 /var/spool/cron/root。
五、定时任务的时间格式¶
cron 最核心的就是时间字段。虽然不同环境里常见格式稍有区别,但日常使用时最重要的是先理解“按分钟、小时、日期、月份、星期”去指定执行时间。
原始笔记里给了几个很典型的认知示例:
- 每天早上固定时间执行某个动作
- 每天午夜执行某个动作
- 每周六固定时间执行某个动作
使用 cron 时,一个重要经验是:如果你要表达一个“固定时刻”,就不要在分钟位随手写 *,否则会变成“这一小时里每一分钟都执行一次”。
例如:
00 00 * * * command
表示每天 0 点整执行一次,而不是这一整小时每分钟都执行。
六、时间字段里的特殊符号¶
时间部分最常见的特殊符号如下:
| 符号 | 含义 | 示例 |
|---|---|---|
/ |
每隔多少时间执行一次 | */2 * * * * |
- |
表示连续范围 | 00 08-22 * * * |
, |
表示离散时间点 | 00 08,11,14,17,20 * * * |
* |
表示全部可能值 | * * * * * |
6.1 示例:按间隔执行¶
每 2 分钟执行一次:
*/2 * * * * command
每 2 小时执行一次:
00 */2 * * * command
6.2 示例:按时间段执行¶
每天早上 7 点到晚上 23 点之间,每隔 2 小时执行:
00 07-23/2 * * * command
对应的小时点通常是:
07 09 11 13 15 17 19 21 23
6.3 示例:跨天写法¶
每天 23 点到次日 7 点执行:
00 23,00-07 * * * command
七、小结¶
学 cron 最重要的第一步,不是先写复杂任务,而是先建立三个基础认知:
crond是服务,crontab是管理命令- 日志主要看
/var/log/cron - 时间字段一旦写错,最常见的问题就是“执行太频繁”或“根本没执行”
把这几件事弄明白,再往下做备份、巡检和告警就会容易很多。