首页/系统/Linux 运维命令速查//etc/cron.{hourly,daily,weekly,monthly} 目录
定时任务与计划50 条

/etc/cron.{hourly,daily,weekly,monthly} 目录

把可执行脚本放进对应目录即可被 run-parts 批量调度:daily 等由 /etc/crontab 或 anacron 触发;脚本命名不能带点,且必须有可执行权限。

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

批处理目录是什么

/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。
这四个目录按固定周期由系统触发,具体时刻与执行顺序由系统的调度定义决定,既不保证精确时刻,也不保证目录内脚本的先后关系。需要精确时刻、依赖顺序或错过补跑能力时,应改用带独立时间表达式的调度方式,把要求写清楚比事后解释「为什么没有准点跑」省事。

易错点

  • 脚本没有可执行位或文件名带 .sh 后缀会被 run-parts 静默跳过,用 ls -l 与 run-parts --test 双重核对
  • 无法指定精确时刻:需要每天 02:30 准点这类要求时应写 /etc/cron.d 或 systemd timer,不要依赖目录机制
  • 脚本里使用相对路径或依赖登录环境变量的写法在 cron 环境下会失败,全部用绝对路径并显式设置 PATH
  • 这四个目录默认只有 root 可写,普通用户的周期任务不能用这种方式注册
  • 把多个有先后依赖的脚本放进同一个目录:执行顺序不保证,依赖关系会在某次执行中悄悄颠倒,产生难以复现的失败

数据来源与参考

  • man 8 run-parts
  • man 5 anacrontab
  • Debian cron 文档

相关工具

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