系统级计划任务放哪
系统级任务与用户级 crontab 分开管理:/etc/cron.d 下的文件写系统任务,每行比用户 crontab 多一个用户名字段;cron.hourly、cron.daily、cron.weekly、cron.monthly 目录用来放可执行脚本,由 run-parts 按目录周期调用。长期运行的任务建议改用 systemd timer 以便统一日志。
基本信息
| 系统任务目录 | /etc/cron.d/ |
|---|---|
| 目录式任务 | /etc/cron.hourly、cron.daily、cron.weekly、cron.monthly |
| 调用者 | run-parts |
| 补跑机制 | anacron(/etc/anacrontab) |
| 服务名 | RPM 系 crond,DEB 系 cron |
典型使用场景
- 放送系统维护脚本,如日志清理与临时文件回收
- 按天或按周执行备份与统计任务
- 把脚本交给目录式任务,无需写时间表达式
- 非 7x24 运行的机器需要停机后补跑任务
- 运维交接:把定时任务统一放在受管目录便于审计
系统任务文件示例
系统任务文件示例
# /etc/cron.d/app-task(分 时 日 月 周 用户 命令,比 crontab 多一列用户)
30 3 * * * root /opt/scripts/cleanup.sh >/dev/null 2>&1
# 文件要求:属主 root、组与其他用户不可写、结尾有空行
ls -l /etc/cron.d/app-task
cat /etc/cron.d/app-task目录式任务
目录式任务
ls /etc/cron.{hourly,daily,weekly,monthly} # 查看各目录现有脚本
install -m 755 /opt/scripts/report.sh /etc/cron.daily/report # 放入并按周期执行
run-parts --test /etc/cron.daily # 演练看哪些文件会被执行
cat /etc/anacrontab # 查看补跑配置
journalctl -u crond -n 50 --no-pager | tail -20 # 确认任务被触发三种调度方式对比
| 方式 | 配置文件 | 特点 |
|---|---|---|
| 用户 crontab | crontab -e | 按用户隔离,环境最简 |
| 系统任务 | /etc/cron.d/ | 多一列用户名,便于集中管理 |
| 目录式任务 | cron.daily 等目录 | 按目录周期执行,不需要写时间 |
| systemd timer | timer 与 service 单元 | 日志进 journal,可配依赖与补跑 |
anacron 负责补跑停机期间错过的日、周任务;机器不是全天运行的场景下,能否补跑取决于 /etc/anacrontab 的配置。
运维建议
- 任务脚本登记进配置管理或资产清单
- 重要任务加重定向并记录退出码
- 避免多个入口重复定义同一任务
- 定期核对补跑配置是否符合预期
- 任务集中管理,便于交接与审计