首页/系统/Linux 运维命令速查/run-parts 批量执行目录脚本
定时任务与计划50 条

run-parts 批量执行目录脚本

顺序执行目录内符合命名规则的脚本:--test 只列不跑、--report 输出被跑脚本名、--reverse 反序;也是调试 cron.daily 脚本的利器。

Linux 运维命令速查系统更新于 2026-10-13

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 只验证命名与可执行性,不检查脚本内部语法与运行时依赖:干跑通过不等于脚本能正常完成,真实执行与日志验证仍不可少。

易错点

  • 脚本名带点号后缀(如 backup.sh):常被 run-parts 静默跳过,改名或在 cron 里直接调用
  • 只做 --test 就认为没问题:它不检查内部语法与依赖,必须实跑并看日志
  • 脚本有输出但 cron 没执行:多半是权限或命名问题,先用 run-parts --test 看是否被识别
  • 在 RHEL 与 Debian 之间直接搬脚本:run-parts 的参数与所属包不同,需要先验证再上线

数据来源与参考

  • man 8 run-parts(Debian debianutils)
  • RHEL crontabs 包文档

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌