最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Crontab 实现系统临时文件定期清理自动化
时间:2026-07-20 16:56:48 编辑:袖梨 来源:一聚教程网
应封装清理脚本而非直接在crontab写命令链:用绝对路径、加日志、先-test后执行、限制-maxdepth和-type;按用途选crontab入口,配合适当时间策略与验证机制。
用 crontab 实现临时文件定期清理,关键不在命令多长,而在是否可控、可查、不误删。直接往 crontab 里塞 find ... -delete 看似简洁,但出错难定位、环境不一致、没日志、易删错目录——这些才是真实运维中踩坑最多的地方。
优先封装脚本,别在 crontab 里写命令链
把清理逻辑写进独立脚本(比如 /usr/local/bin/clean-tmp.sh),比在 crontab -e 里贴一长串命令更可靠:
- 开头固定解释器:
#!/bin/bash - 所有命令用绝对路径:
/usr/bin/find、/bin/rm、/bin/echo - 加执行日志:
echo "$(date): start cleanup" >> /var/log/clean-tmp.log - 先测试再执行:用
-print替换-delete运行一次,确认要删的文件列表无误 - 限制范围:
-maxdepth 1防止递归误入子目录;-type f只处理文件,跳过目录
按需选择任务位置和权限配置
不是所有任务都该用 crontab -e。根据用途选对入口:
- 单用户级清理(如家目录缓存):用
crontab -e,格式是分 时 日 月 周 命令 - 系统级清理(如
/tmp、/var/log):编辑/etc/crontab,必须多写一列用户名(如root) - 想免写时间表达式:把脚本放进
/etc/cron.daily/,系统会自动每天执行(适合简单、固定频次任务)
注意:/etc/crontab 中建议显式设置 PATH,避免因环境变量缺失导致 find 或 free 找不到。
时间规则与清理策略要匹配实际需求
别照搬“每天清 /tmp”,先看它到底存什么、谁在用:
-
/tmp:多数服务用完即弃,可设为每天凌晨清理,条件用-mtime +1或-atime +1 -
/var/log:优先交给logrotate管理;crontab 可作兜底,清理*.log.*.gz中超过 30 天的归档包 - 自定义临时目录(如
/data/tmp):按业务生命周期设时限,比如-mtime +3表示 3 天未改就清理 - 浏览器或应用缓存(如
~/.cache):用-mtime +14配合-empty -delete清空空目录更安全
验证和日志是自动化不可省的环节
配置完不等于跑成功。这几步必须做:
- 手动执行脚本:
/bin/bash --noprofile --norc /usr/local/bin/clean-tmp.sh,模拟 cron 环境 - 检查 cron 服务状态:
systemctl status cron(Debian/Ubuntu)或systemctl status crond(RHEL/CentOS) - 查 cron 日志:
grep CRON /var/log/syslog或journalctl -u cron -n 50 - 确认脚本有执行权限:
chmod +x /usr/local/bin/clean-tmp.sh - 输出重定向不能少:
>>/var/log/clean-tmp.log 2>&1,否则失败无声无息