/var/spool/cron 是什么
用户 crontab 的真身保存在 spool 目录中:RHEL 系是 /var/spool/cron/<用户>,Debian 系是 /var/spool/cron/crontabs/<用户>。crontab 命令只是安全的编辑入口,真正被 cron 读取并加载的是这些文件。定位「任务为什么没生效」或做任务备份时,需要先知道文件到底在哪、权限应该是什么。
基本信息
| RHEL/CentOS 路径 | /var/spool/cron/<用户名> |
|---|---|
| Debian/Ubuntu 路径 | /var/spool/cron/crontabs/<用户名> |
| 权限要求 | 目录与文件通常为 0700 与 0600,属主受限 |
| 编辑入口 | crontab -e、crontab -l、crontab -u 用户 |
典型使用场景
- 定位任务文件本体,确认改动确实写入磁盘
- 备份用户任务清单,便于迁移与回滚
- 排查任务未被加载的原因:文件在但 cron 不认
- 权限被误改之后恢复目录与文件权限
- 换机器时搬运任务清单
- 审计某个账号到底被写入了哪些任务
查看与备份
查看与备份
sudo ls -l /var/spool/cron/ 2>/dev/null || sudo ls -l /var/spool/cron/crontabs/
sudo cat /var/spool/cron/root | head # 查看 root 的任务文件
crontab -l # 更安全的查看方式
crontab -l > /opt/scripts/crontab-root-$(date +%F).bak # 推荐备份方式
sudo crontab -u deploy -l # 查看指定用户的任务
sudo chmod 700 /var/spool/cron/crontabs # 权限被改坏后恢复(Debian)
stat -c '%a %U %G' /var/spool/cron/crontabs # 核对权限与属主任务文件位置对照
| 系统 | 用户任务文件 | 说明 |
|---|---|---|
| RHEL/CentOS | /var/spool/cron/<用户> | 目录权限通常为 0700 |
| Debian/Ubuntu | /var/spool/cron/crontabs/<用户> | 目录权限 0700,属主 root |
| 通用 | /etc/crontab | 系统级任务,带用户名字段 |
| 通用 | /etc/cron.d/ | 按文件加载的系统级任务目录 |
直接编辑 spool 文件在部分发行版不会生效,或者触发权限与属主问题;crontab -e 与 crontab -u 才是被支持的路径。
spool 目录权限被误改(例如放开到人人可写)会导致任务被 cron 拒绝加载,表现为任务静默消失,需要恢复标准权限与属主。
用重定向覆盖 spool 文件会绕过语法校验,坏格式会静默不生效;即使应急修改,也应随后用 crontab -l 复核内容。
对比 crontab -l 的输出与 spool 文件的内容,可以判断是否有人绕过命令直接改过文件:两者不一致时,文件的属主与修改时间值得重点核实。
备份建议导出 crontab -l 的结果并归档,而不是直接拷贝 spool 文件:导出内容按用户归档,恢复时不容易搞混归属与权限。