run-parts 是目录任务的执行引擎
run-parts 顺序执行目录中符合命名规则的脚本,是 /etc/cron.hourly、cron.daily 这类目录的执行引擎:cron 只负责在指定时刻调用 run-parts,目录里的脚本才真正干活。--test 可以只列出将要执行的脚本(干跑),--report 会打印每个被执行的脚本名,--reverse 反向执行。排查“脚本为什么没被跑”时,它是最直接的验证工具。
基本信息
| 适用平台 | Debian/Ubuntu(debianutils)与 RHEL 系(crontabs 包,参数略有差异) |
|---|---|
| 语法 | run-parts [--test|--report|--reverse] 目录 |
| 命名规则 | 只允许字母、数字、下划线与连字符,带点号后缀的脚本常被跳过 |
| 相关目录 | /etc/cron.hourly、cron.daily、cron.weekly、cron.monthly |
| 权限要求 | 执行需相应权限,cron 目录下的脚本通常以 root 运行 |
典型使用场景
- 调试“放进 cron.daily 的脚本为什么没执行”
- 干跑确认目录里哪些脚本会被识别
- 手动触发一次日任务做验证
- 排查脚本有输出但 cron 没反应(多为命名或权限问题)
- 迁移系统前确认 run-parts 的参数差异
常用示例
常用示例
ls -l /etc/cron.daily # 先看脚本名与权限
run-parts --test /etc/cron.daily # 干跑:只列出将被执行的脚本
run-parts --report /etc/cron.daily # 实际执行并打印每个脚本名
run-parts --reverse --report /etc/cron.daily # 反序执行,存在顺序依赖时用
run-parts /etc/cron.weekly 2>&1 | tee /tmp/weekly.log # 留档输出便于复盘
run-parts --list /etc/cron.daily 2>/dev/null || run-parts --test /etc/cron.daily # 版本差异时换参数参数与行为
| 参数 | 作用 | 注意 |
|---|---|---|
| --test | 只列出将被执行的脚本 | 不检查脚本内部语法 |
| --report | 执行并打印每个脚本名 | 排查“到底跑了哪几个”最有用 |
| --reverse | 按反序执行 | 目录内脚本存在顺序依赖时使用 |
| 无参数 | 安静执行 | cron 调用时的默认方式 |
| 命名规则 | 字母数字下划线与连字符 | 带点号后缀的脚本常被跳过 |
| 与 cron 的关系 | cron 定时调用 run-parts | 脚本没跑先查命名与权限 |
Debian 与 RHEL 的 run-parts 参数并不完全一致(RHEL 的版本在 crontabs 包里):跨发行版脚本先探测可用参数,不要把某个发行版的用法当成通用标准。
--test 只验证命名与可执行性,不检查脚本内部语法与运行时依赖:干跑通过不等于脚本能正常完成,真实执行与日志验证仍不可少。