批处理目录是什么
/etc/cron.hourly、/etc/cron.daily、/etc/cron.weekly、/etc/cron.monthly 四个目录接受可执行脚本,由 /etc/crontab 中的 run-parts 行或 anacron 批量触发。把脚本放进去即参与调度,不用写五段式任务行,适合周期粗粒度、能容忍执行时刻波动的批处理。
基本信息
| 适用平台 | RHEL 系与 Debian 系都有,但触发机制与时刻约定不同 |
|---|---|
| 触发方式 | /etc/crontab 里的 run-parts 行,或 anacron(RHEL 由 cronie-anacron 提供) |
| 命名要求 | 文件名只能含字母、数字、下划线与连字符,且必须具备可执行权限 |
| 运行身份 | 通常以 root 运行,脚本内不需要 sudo |
典型使用场景
- 日志清理、临时文件回收等常规批处理:不对具体时刻敏感,放进 daily 最省事
- 安全巡检与更新检查:每天跑一次的检查类脚本
- 承接软件包注册的脚本:包管理器通过把脚本安装到 cron.daily 注册日常任务
- 不想写 crontab:不需要五段表达式,落盘即生效
- 统一管理:脚本进配置管理仓库,分发到各机器的对应目录
添加与验证
添加与验证
sudo install -m 0755 /opt/scripts/log-clean.sh /etc/cron.daily/log-clean
ls -l /etc/cron.daily/ # 确认权限与命名合规
sudo run-parts --test /etc/cron.daily # 只列出会被执行的脚本,不改动系统
sudo run-parts /etc/cron.daily # 手动全跑一遍验证
sudo run-parts --test /etc/cron.daily | wc -l # 与预期数量核对查触发时刻定义
查触发时刻定义
grep -rn run-parts /etc/crontab /etc/cron.d/ 2>/dev/null
cat /etc/anacrontab 2>/dev/null # anacron 的周期与延时定义
systemctl status crond --no-pager | head -n 5 # RHEL 系的服务状态四个目录对照
| 目录 | 常见触发 | 说明 |
|---|---|---|
| /etc/cron.hourly | 每小时一次 | 由 /etc/crontab 的 run-parts 行驱动 |
| /etc/cron.daily | 每天固定时刻 | 发行版约定时间,多在清晨 |
| /etc/cron.weekly | 每周一次 | 星期与时刻同样由发行版约定 |
| /etc/cron.monthly | 每月一次 | 不保证精确时刻 |
cron.daily 的具体触发时间由发行版约定(常见在 06:25 前后),脚本内部不要假设自己一定在午夜运行。
机器关机错过的窗口由 anacron 按 /etc/anacrontab 的定义补跑,确认 anacron 服务在运行,否则长期关机的机器会持续漏跑。
run-parts 会跳过含点号的文件名:log-clean.sh 不会被调度,去掉后缀或改名为 log-clean。
这四个目录按固定周期由系统触发,具体时刻与执行顺序由系统的调度定义决定,既不保证精确时刻,也不保证目录内脚本的先后关系。需要精确时刻、依赖顺序或错过补跑能力时,应改用带独立时间表达式的调度方式,把要求写清楚比事后解释「为什么没有准点跑」省事。