教程 rockylinux tutorial

定时任务(cron)

在 Linux 系统中,cron 是最常用的任务调度工具之一。
它可以在指定的时间周期自动执行命令或脚本,广泛用于日志清理、备份、监控与自动化运维。

一、cron 基本概念

cron 由两个主要组件组成:

组件 作用
crond 常驻进程,负责周期性检查任务并执行
crontab 用户任务表文件,定义要执行的命令和时间规则

服务启动命令:

bash
sudo systemctl enable crond
sudo systemctl start crond

查看状态:

bash
systemctl status crond

二、crontab 的语法格式

每个定时任务的格式如下:

bash
* * * * *  command

对应含义:

字段 含义 取值范围
第 1 列 分钟(minute) 0–59
第 2 列 小时(hour) 0–23
第 3 列 日期(day) 1–31
第 4 列 月份(month) 1–12
第 5 列 星期(week) 0–7(0 与 7 都代表星期日)
第 6 列 执行命令 任意可执行命令

三、crontab 常用命令

1. 编辑当前用户的任务表

bash
crontab -e

2. 查看当前用户任务

bash
crontab -l

3. 删除当前用户任务

bash
crontab -r

4. 查看系统全局任务

bash
sudo cat /etc/crontab

四、常见时间表达式示例

时间规则 含义 示例命令
* * * * * 每分钟执行 echo “hello”
0 * * * * 每小时整点执行 systemctl restart nginx
0 2 * * * 每天凌晨 2 点执行 /backup/backup.sh
30 3 * * 1 每周一凌晨 3:30 执行 rsync -av /data /backup/
*/10 * * * * 每 10 分钟执行一次 bash /scripts/check.sh
0 0 1 * * 每月 1 日 0 点执行 tar -czf /backup/monthly.tar.gz /home

五、系统级与用户级任务

1. 用户级任务

每个用户可独立管理自己的任务表:

bash
crontab -e

任务存储路径:

代码
/var/spool/cron/<username>

2. 系统级任务

全局配置文件:

代码
/etc/crontab

该文件增加了一列“用户”字段:

bash
* * * * * user command

示例:

bash
0 4 * * * root /usr/local/bin/backup.sh

六、基于目录的任务(/etc/cron.*)

Rocky Linux 提供以下目录,用于不同周期任务:

目录 执行频率
/etc/cron.hourly/ 每小时执行一次
/etc/cron.daily/ 每天执行一次
/etc/cron.weekly/ 每周执行一次
/etc/cron.monthly/ 每月执行一次

只需将可执行脚本放入对应目录即可。

七、日志与调试

1. 查看 cron 执行日志

bash
sudo cat /var/log/cron

查看最近任务执行记录:

bash
sudo grep CRON /var/log/cron

2. 任务输出重定向

在 crontab 中指定日志输出:

bash
0 2 * * * /backup/backup.sh >> /var/log/backup.log 2>&1

3. 邮件通知(可选)

系统会将 cron 输出结果发送至本地邮件,可使用 MAILTO 指定接收人:

bash
MAILTO="[email protected]"
0 3 * * * /scripts/check_disk.sh

八、常见问题与排查

问题 可能原因 解决办法
任务未执行 crond 服务未启动 sudo systemctl start crond
命令路径不对 环境变量不同于登录 shell 使用命令绝对路径(如 /usr/bin/python3)
输出未记录 未重定向日志 添加 >> /var/log/task.log 2>&1
用户权限不足 普通用户任务执行失败 检查 /etc/cron.allow 与 /etc/cron.deny

九、示例:自动备份任务

1. 创建脚本 /scripts/db_backup.sh

bash
#!/bin/bash
mysqldump -u root -p123456 mydb > /backup/mydb-$(date +%F).sql

添加执行权限:

bash
chmod +x /scripts/db_backup.sh

2. 添加定时任务

bash
crontab -e

内容:

bash
0 2 * * * /scripts/db_backup.sh >> /var/log/db_backup.log 2>&1

每天凌晨 2 点自动备份数据库。

十、总结

  • cron 是 Rocky Linux 中最常用的任务调度机制;
  • 任务可配置在用户级或系统级;
  • 使用日志与 MAILTO 便于排错与监控;
  • 定时备份、系统清理、服务检测均可通过 cron 自动化实现。

💡 提示:对于复杂的任务依赖与失败重试,可使用 systemd timer 或 atd 进行补充调度。