Linux周期性任务cron

Linux下的 周期性任务 一般是通过 cron 服务来实现的。
cron 是一个守护进程,负责在预设的时间周期性地执行任务(如脚本、命令)。


1. cron 服务

  • 守护进程名:crond

  • 配置文件:

    • 用户级:crontab -e(存放在 /var/spool/cron/用户名
    • 系统级:/etc/crontab/etc/cron.d//etc/cron.daily/

服务管理:

1
2
3
4
5
6
7
8
# 启动
systemctl start crond

# 开机自启
systemctl enable crond

# 查看状态
systemctl status crond

2. crontab 语法

基本格式:

分 时 日 月 周  命令

字段说明:

字段 取值范围 说明
0–59 分钟
0–23 小时
1–31 日期
1–12 月份
0–7 星期 (0 和 7 都表示星期天)

特殊符号:

  • *:任意取值
  • ,:列举多个值(如 1,15 表示第 1 和第 15 分钟)
  • -:范围(如 1-5 表示 1 到 5 分钟)
  • /:步长(如 */5 表示每 5 分钟)

3. 示例

1
2
3
4
5
6
7
8
9
10
11
# 每天凌晨 2 点执行备份脚本
0 2 * * * /usr/local/bin/backup.sh

# 每 5 分钟执行一次任务
*/5 * * * * /usr/local/bin/check_service.sh

# 每周一凌晨 3 点执行
0 3 * * 1 /usr/local/bin/weekly_report.sh

# 每月 1 号凌晨 0 点执行
0 0 1 * * /usr/local/bin/monthly_clean.sh

4. 常见用法

  • 编辑当前用户的定时任务:

    1
    crontab -e
  • 查看当前用户的定时任务:

    1
    crontab -l
  • 删除当前用户所有定时任务:

    1
    crontab -r

5. 日志与排错

  • 任务执行日志一般记录在:

    1
    /var/log/cron
  • 命令输出(stdout/stderr)默认不会记录,需手动重定向:

    1
    */10 * * * * /usr/local/bin/task.sh >> /var/log/task.log 2>&1

6. 系统级周期性目录

系统还提供了以下目录,用来存放 脚本文件(而不是 crontab 配置):

  • /etc/cron.hourly/ → 每小时执行
  • /etc/cron.daily/ → 每天执行
  • /etc/cron.weekly/ → 每周执行
  • /etc/cron.monthly/ → 每月执行

放入这些目录的脚本会由 /etc/crontab 中的 run-parts 调度。