主题
定时任务(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 -e2. 查看当前用户任务
bash
crontab -l3. 删除当前用户任务
bash
crontab -r4. 查看系统全局任务
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/cron2. 任务输出重定向
在 crontab 中指定日志输出:
bash
0 2 * * * /backup/backup.sh >> /var/log/backup.log 2>&13. 邮件通知(可选)
系统会将 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.sh2. 添加定时任务
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进行补充调度。