定时任务(cron)
在 Linux 系统中,cron 是最常用的任务调度工具之一。
它可以在指定的时间周期自动执行命令或脚本,广泛用于日志清理、备份、监控与自动化运维。
一、cron 基本概念
cron 由两个主要组件组成:
| 组件 | 作用 |
|---|---|
| crond | 常驻进程,负责周期性检查任务并执行 |
| crontab | 用户任务表文件,定义要执行的命令和时间规则 |
服务启动命令:
sudo systemctl enable crond
sudo systemctl start crond
查看状态:
systemctl status crond
二、crontab 的语法格式
每个定时任务的格式如下:
* * * * * 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. 编辑当前用户的任务表
crontab -e
2. 查看当前用户任务
crontab -l
3. 删除当前用户任务
crontab -r
4. 查看系统全局任务
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. 用户级任务
每个用户可独立管理自己的任务表:
crontab -e
任务存储路径:
/var/spool/cron/<username>
2. 系统级任务
全局配置文件:
/etc/crontab
该文件增加了一列“用户”字段:
* * * * * user command
示例:
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 执行日志
sudo cat /var/log/cron
查看最近任务执行记录:
sudo grep CRON /var/log/cron
2. 任务输出重定向
在 crontab 中指定日志输出:
0 2 * * * /backup/backup.sh >> /var/log/backup.log 2>&1
3. 邮件通知(可选)
系统会将 cron 输出结果发送至本地邮件,可使用 MAILTO 指定接收人:
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
#!/bin/bash
mysqldump -u root -p123456 mydb > /backup/mydb-$(date +%F).sql
添加执行权限:
chmod +x /scripts/db_backup.sh
2. 添加定时任务
crontab -e
内容:
0 2 * * * /scripts/db_backup.sh >> /var/log/db_backup.log 2>&1
每天凌晨 2 点自动备份数据库。
十、总结
cron是 Rocky Linux 中最常用的任务调度机制;- 任务可配置在用户级或系统级;
- 使用日志与
MAILTO便于排错与监控; - 定时备份、系统清理、服务检测均可通过 cron 自动化实现。
💡 提示:对于复杂的任务依赖与失败重试,可使用
systemd timer或atd进行补充调度。
相关内容
- 备份与恢复 本文介绍如何在 Rocky Linux 系统中执行数据与系统的备份与恢复,包括 rsync、tar、Timeshift、快照与自动化定时任务等多种方法。
- Rocky Linux 与 RHEL 的区别 详细分析 Rocky Linux 与 Red Hat Enterprise Linux (RHEL) 的区别,包括开发背景、兼容性、更新策略、社区支持和企业使用...
- 数据库服务(MySQL / PostgreSQL) 在 Rocky Linux 中安装和配置 MySQL 与 PostgreSQL 数据库服务,涵盖安装命令、防火墙配置、开机自启和基础安全设置。
- Python 与 Node.js 环境配置 在 Rocky Linux 中安装与管理 Python、pip、Node.js 与 npm 环境,涵盖多版本管理、全局模块安装、国内源配置等实用技巧。
- 磁盘与分区管理(lsblk、fdisk) 详细介绍 Rocky Linux 中使用 lsblk 和 fdisk 工具进行磁盘和分区管理的方法,包括查看磁盘信息、创建分区、删除分区等操作
- 使用 dnf 管理软件包 详细介绍 Rocky Linux 中 dnf 包管理器的使用方法,包括安装、更新、删除软件包等操作