一、什么是定时任务

定时任务用于在 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
  • 时间字段一旦写错,最常见的问题就是“执行太频繁”或“根本没执行”

把这几件事弄明白,再往下做备份、巡检和告警就会容易很多。