1.7.2 cron与crontab任务配置

cron与crontab任务配置#

cron 是 Linux 的周期性任务调度服务,crontab 是用户与系统级任务的配置入口。适用于备份、日志轮转、巡检脚本、数据同步等场景。

1. 原理草图(cron 调度流程)



<div class="diagram-block"><img alt="flowchart" src="data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI3NDYiIGhlaWdodD0iNzM4IiB2aWV3Qm94PSIwIDAgNzQ2IDczOCI+PGRlZnM+PGxpbmVhckdyYWRpZW50IGlkPSJub2RlRmlsbCIgeDE9IjAlIiB5MT0iMCUiIHgyPSIxMDAlIiB5Mj0iMTAwJSI+PHN0b3Agb2Zmc2V0PSIwJSIgc3RvcC1jb2xvcj0iI2ZmZmFmMSIgLz48c3RvcCBvZmZzZXQ9IjEwMCUiIHN0b3AtY29sb3I9IiNmMWU3ZDMiIC8+PC9saW5lYXJHcmFkaWVudD48bWFya2VyIGlkPSJhcnJvdyIgbWFya2VyV2lkdGg9IjEyIiBtYXJrZXJIZWlnaHQ9IjEyIiByZWZYPSIxMCIgcmVmWT0iNiIgb3JpZW50PSJhdXRvIiBtYXJrZXJVbml0cz0ic3Ryb2tlV2lkdGgiPjxwYXRoIGQ9Ik0gMCAwIEwgMTIgNiBMIDAgMTIgeiIgZmlsbD0iIzhiNmEzZiIgLz48L21hcmtlcj48L2RlZnM+PHJlY3QgeD0iMCIgeT0iMCIgd2lkdGg9Ijc0NiIgaGVpZ2h0PSI3MzgiIHJ4PSIxOCIgZmlsbD0iI2ZjZjhmMiIgLz48cGF0aCBkPSJNIDM3My4wIDk0LjAgTCAzNzMuMCAxMzguMCBMIDExOC4wIDEzOC4wIEwgMTE4LjAgMTgyLjAiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzhiNmEzZiIgc3Ryb2tlLXdpZHRoPSIyLjgiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgbWFya2VyLWVuZD0idXJsKCNhcnJvdykiIC8+PHBhdGggZD0iTSAzNzMuMCA5NC4wIEwgMzczLjAgMTM4LjAgTCAzNDAuMCAxMzguMCBMIDM0MC4wIDE4Mi4wIiBmaWxsPSJub25lIiBzdHJva2U9IiM4YjZhM2YiIHN0cm9rZS13aWR0aD0iMi44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIG1hcmtlci1lbmQ9InVybCgjYXJyb3cpIiAvPjxwYXRoIGQ9Ik0gMzczLjAgOTQuMCBMIDM3My4wIDEzOC4wIEwgNTk1LjAgMTM4LjAgTCA1OTUuMCAxODIuMCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjOGI2YTNmIiBzdHJva2Utd2lkdGg9IjIuOCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBtYXJrZXItZW5kPSJ1cmwoI2Fycm93KSIgLz48cGF0aCBkPSJNIDExOC4wIDI0OC4wIEwgMTE4LjAgMjkyLjAgTCAzNzMuMCAyOTIuMCBMIDM3My4wIDMzNi4wIiBmaWxsPSJub25lIiBzdHJva2U9IiM4YjZhM2YiIHN0cm9rZS13aWR0aD0iMi44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIG1hcmtlci1lbmQ9InVybCgjYXJyb3cpIiAvPjxwYXRoIGQ9Ik0gMzQwLjAgMjQ4LjAgTCAzNDAuMCAyOTIuMCBMIDM3My4wIDI5Mi4wIEwgMzczLjAgMzM2LjAiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzhiNmEzZiIgc3Ryb2tlLXdpZHRoPSIyLjgiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgbWFya2VyLWVuZD0idXJsKCNhcnJvdykiIC8+PHBhdGggZD0iTSA1OTUuMCAyNDguMCBMIDU5NS4wIDI5Mi4wIEwgMzczLjAgMjkyLjAgTCAzNzMuMCAzMzYuMCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjOGI2YTNmIiBzdHJva2Utd2lkdGg9IjIuOCIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIiBtYXJrZXItZW5kPSJ1cmwoI2Fycm93KSIgLz48cGF0aCBkPSJNIDM3My4wIDQwMi4wIEwgMzczLjAgNDQ2LjAgTCAzNzMuMCA0NDYuMCBMIDM3My4wIDQ5MC4wIiBmaWxsPSJub25lIiBzdHJva2U9IiM4YjZhM2YiIHN0cm9rZS13aWR0aD0iMi44IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiIG1hcmtlci1lbmQ9InVybCgjYXJyb3cpIiAvPjxwYXRoIGQ9Ik0gMzczLjAgNTU2LjAgTCAzNzMuMCA2MDAuMCBMIDM3My4wIDYwMC4wIEwgMzczLjAgNjQ0LjAiIGZpbGw9Im5vbmUiIHN0cm9rZT0iIzhiNmEzZiIgc3Ryb2tlLXdpZHRoPSIyLjgiIHN0cm9rZS1saW5lY2FwPSJyb3VuZCIgc3Ryb2tlLWxpbmVqb2luPSJyb3VuZCIgbWFya2VyLWVuZD0idXJsKCNhcnJvdykiIC8+PHJlY3QgeD0iMjgzLjAiIHk9IjI4LjAiIHdpZHRoPSIxODAiIGhlaWdodD0iNjYiIHJ4PSIxNiIgZmlsbD0idXJsKCNub2RlRmlsbCkiIHN0cm9rZT0iI2I1OGM1NSIgc3Ryb2tlLXdpZHRoPSIyIiAvPjx0ZXh0IHg9IjM3My4wIiB5PSI2Ni4wIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LWZhbWlseT0iTWljcm9zb2Z0IFlhSGVpIFVJLCBQaW5nRmFuZyBTQywgTm90byBTYW5zIENKSyBTQywgQXJpYWwsIHNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMTYiIGZvbnQtd2VpZ2h0PSI2MDAiIGZpbGw9IiMyZjNmNTIiPjx0c3BhbiB4PSIzNzMuMCIgZHk9IjAiPmNyb25kIOacjeWKoTwvdHNwYW4+PC90ZXh0PjxyZWN0IHg9IjI4LjAiIHk9IjE4Mi4wIiB3aWR0aD0iMTgwIiBoZWlnaHQ9IjY2IiByeD0iMTYiIGZpbGw9InVybCgjbm9kZUZpbGwpIiBzdHJva2U9IiNiNThjNTUiIHN0cm9rZS13aWR0aD0iMiIgLz48dGV4dCB4PSIxMTguMCIgeT0iMjIwLjAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtZmFtaWx5PSJNaWNyb3NvZnQgWWFIZWkgVUksIFBpbmdGYW5nIFNDLCBOb3RvIFNhbnMgQ0pLIFNDLCBBcmlhbCwgc2Fucy1zZXJpZiIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9IjYwMCIgZmlsbD0iIzJmM2Y1MiI+PHRzcGFuIHg9IjExOC4wIiBkeT0iMCI+L2V0Yy9jcm9udGFiPC90c3Bhbj48L3RleHQ+PHJlY3QgeD0iMjUwLjAiIHk9IjE4Mi4wIiB3aWR0aD0iMTgwIiBoZWlnaHQ9IjY2IiByeD0iMTYiIGZpbGw9InVybCgjbm9kZUZpbGwpIiBzdHJva2U9IiNiNThjNTUiIHN0cm9rZS13aWR0aD0iMiIgLz48dGV4dCB4PSIzNDAuMCIgeT0iMjIwLjAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtZmFtaWx5PSJNaWNyb3NvZnQgWWFIZWkgVUksIFBpbmdGYW5nIFNDLCBOb3RvIFNhbnMgQ0pLIFNDLCBBcmlhbCwgc2Fucy1zZXJpZiIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9IjYwMCIgZmlsbD0iIzJmM2Y1MiI+PHRzcGFuIHg9IjM0MC4wIiBkeT0iMCI+L2V0Yy9jcm9uLmQvKjwvdHNwYW4+PC90ZXh0PjxyZWN0IHg9IjQ3Mi4wIiB5PSIxODIuMCIgd2lkdGg9IjI0NiIgaGVpZ2h0PSI2NiIgcng9IjE2IiBmaWxsPSJ1cmwoI25vZGVGaWxsKSIgc3Ryb2tlPSIjYjU4YzU1IiBzdHJva2Utd2lkdGg9IjIiIC8+PHRleHQgeD0iNTk1LjAiIHk9IjIyMC4wIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBmb250LWZhbWlseT0iTWljcm9zb2Z0IFlhSGVpIFVJLCBQaW5nRmFuZyBTQywgTm90byBTYW5zIENKSyBTQywgQXJpYWwsIHNhbnMtc2VyaWYiIGZvbnQtc2l6ZT0iMTYiIGZvbnQtd2VpZ2h0PSI2MDAiIGZpbGw9IiMyZjNmNTIiPjx0c3BhbiB4PSI1OTUuMCIgZHk9IjAiPi92YXIvc3Bvb2wvY3Jvbi8mbHQ7dXNlciZndDs8L3RzcGFuPjwvdGV4dD48cmVjdCB4PSIyODMuMCIgeT0iMzM2LjAiIHdpZHRoPSIxODAiIGhlaWdodD0iNjYiIHJ4PSIxNiIgZmlsbD0idXJsKCNub2RlRmlsbCkiIHN0cm9rZT0iI2I1OGM1NSIgc3Ryb2tlLXdpZHRoPSIyIiAvPjx0ZXh0IHg9IjM3My4wIiB5PSIzNzQuMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9Ik1pY3Jvc29mdCBZYUhlaSBVSSwgUGluZ0ZhbmcgU0MsIE5vdG8gU2FucyBDSksgU0MsIEFyaWFsLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE2IiBmb250LXdlaWdodD0iNjAwIiBmaWxsPSIjMmYzZjUyIj48dHNwYW4geD0iMzczLjAiIGR5PSIwIj7op6PmnpDml7bpl7Tooajovr7lvI88L3RzcGFuPjwvdGV4dD48cmVjdCB4PSIyODMuMCIgeT0iNDkwLjAiIHdpZHRoPSIxODAiIGhlaWdodD0iNjYiIHJ4PSIxNiIgZmlsbD0idXJsKCNub2RlRmlsbCkiIHN0cm9rZT0iI2I1OGM1NSIgc3Ryb2tlLXdpZHRoPSIyIiAvPjx0ZXh0IHg9IjM3My4wIiB5PSI1MjguMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1mYW1pbHk9Ik1pY3Jvc29mdCBZYUhlaSBVSSwgUGluZ0ZhbmcgU0MsIE5vdG8gU2FucyBDSksgU0MsIEFyaWFsLCBzYW5zLXNlcmlmIiBmb250LXNpemU9IjE2IiBmb250LXdlaWdodD0iNjAwIiBmaWxsPSIjMmYzZjUyIj48dHNwYW4geD0iMzczLjAiIGR5PSIwIj7miafooYzlkb3ku6Qv6ISa5pysPC90c3Bhbj48L3RleHQ+PHJlY3QgeD0iMjgzLjAiIHk9IjY0NC4wIiB3aWR0aD0iMTgwIiBoZWlnaHQ9IjY2IiByeD0iMTYiIGZpbGw9InVybCgjbm9kZUZpbGwpIiBzdHJva2U9IiNiNThjNTUiIHN0cm9rZS13aWR0aD0iMiIgLz48dGV4dCB4PSIzNzMuMCIgeT0iNjgyLjAiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGZvbnQtZmFtaWx5PSJNaWNyb3NvZnQgWWFIZWkgVUksIFBpbmdGYW5nIFNDLCBOb3RvIFNhbnMgQ0pLIFNDLCBBcmlhbCwgc2Fucy1zZXJpZiIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9IjYwMCIgZmlsbD0iIzJmM2Y1MiI+PHRzcGFuIHg9IjM3My4wIiBkeT0iMCI+6L6T5Ye66YeN5a6a5ZCRL+mCruS7tumAmuefpTwvdHNwYW4+PC90ZXh0Pjwvc3ZnPg==" /></div>


2. 安装与服务管理(含命令解释)
- RHEL/CentOS:

```bash
# 安装 cron 服务
yum install -y cronie

# 启动并设置开机自启
systemctl enable --now crond

# 查看服务状态(Active: active 表示正常)
systemctl status crond

- Debian/Ubuntu:
# 安装 cron 服务
apt-get update && apt-get install -y cron

# 启动并设置开机自启
systemctl enable --now cron

# 查看服务状态
systemctl status cron

**3. crontab 时间表达式与示例(含预期效果)**
格式:
分 时 日 月 周 命令

示例:
# 每天 02:30 执行备份脚本
30 2 * * * /opt/backup.sh

# 每周一 01:00 生成报表
0 1 * * 1 /opt/report.sh

# 每 5 分钟执行健康检查
*/5 * * * * /opt/check.sh

# 每月 1 号 00:10 执行月度归档
10 0 1 * * /opt/monthly.sh

字符含义:
- `*` 任意值
- `,` 枚举(如 `1,3,5`)
- `-` 范围(如 `1-5`)
- `*/n` 步长(如 `*/10`)

**4. 用户级 crontab 管理(含完整流程示例)**
# 查看当前用户任务
crontab -l

# 使用 vim 编辑
EDITOR=vim crontab -e

# 删除当前用户所有任务
crontab -r

**用户级示例(每日备份并记录日志)**
# 编辑 crontab
crontab -e

# 添加以下内容
SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
MAILTO=ops@example.com

30 2 * * * /opt/backup.sh >> /var/log/backup.log 2>&1
预期效果:每天 02:30 执行备份,日志写入 `/var/log/backup.log`。

**5. 系统级 crontab 配置(含完整示例)**
系统级配置支持指定执行用户,适合统一运维管理:
# 编辑系统级任务
vim /etc/crontab

SHELL=/bin/bash
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

# 分 时 日 月 周 用户 命令
0 3 * * * root /usr/local/bin/backup.sh >> /var/log/backup.log 2>&1

**6. 环境变量与执行上下文(命令解释)**
cron 环境精简,建议在脚本中设置必要变量:
#!/bin/bash
# /opt/check.sh
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
LANG=en_US.UTF-8

/usr/bin/curl -s http://127.0.0.1:8080/health || exit 1

**7. 输出与日志处理(含 logrotate 示例)**
# crontab 中重定向输出
*/5 * * * * /opt/check.sh >> /var/log/check.log 2>&1

配合 logrotate:
# /etc/logrotate.d/check
/var/log/check.log {
    daily
    rotate 7
    compress
    missingok
    notifempty
}

**8. 常见问题排错(逐步定位)**
- **任务未执行**
# 1) 确认 cron 服务
systemctl status crond

# 2) 确认 crontab 内容
crontab -l

# 3) 确认脚本可执行
ls -l /opt/check.sh
chmod +x /opt/check.sh

# 4) 手动执行验证
/opt/check.sh; echo $?

- **时间不生效**
# 查看时区与系统时间
timedatectl

# 同步时间
timedatectl set-ntp true

- **脚本执行无输出**
# 在脚本中开启调试
bash -x /opt/check.sh >> /var/log/check.debug 2>&1

**9. 进阶实践:任务锁避免并发**
# 使用 flock 防止并发
*/5 * * * * /usr/bin/flock -n /var/run/check.lock /opt/check.sh >> /var/log/check.log 2>&1

```

10. 练习
1. 创建用户级任务:每 10 分钟统计 /var/log 目录大小并记录到 /var/log/size.log
提示命令:du -sh /var/log
2. 创建系统级任务:每天 01:00 清理 7 天前的 /tmp 文件。
提示命令:find /tmp -type f -mtime +7 -delete
3. 故障排查:将 PATH 从 crontab 中移除,观察脚本失败原因,并修复。