最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
Linux 日志清理自动化:如何借助定时任务维护系统盘
时间:2026-07-13 08:39:47 编辑:袖梨 来源:一聚教程网
Linux日志清理自动化需“定时+精准+安全”:用journalctl --vacuum-size压缩journald日志,logrotate轮转标准文本日志,find脚本清理非标日志,并通过磁盘水位联动触发深度清理。
Linux 日志清理自动化,核心是“定时 + 精准 + 安全”。系统盘空间告急往往不是突发问题,而是日志日积月累的结果。靠手动清理治标不治本,必须用 crontab 搭配合理策略,让系统自己定期“打扫卫生”。
按空间阈值自动压缩 journal 日志
systemd-journald 的日志默认不设限,/var/log/journal/ 很容易涨到几 GB 甚至几十 GB。最稳妥的清理方式不是删文件,而是用 journalctl 自带的真空压缩功能:
- 执行 journalctl --vacuum-size=200M 可立即清理旧日志,保留最新 200MB
- 写成脚本(如 /usr/local/bin/vacuum-journal.sh):
#!/bin/bash
journalctl --vacuum-size=200M > /dev/null 2>&1 - 加入 crontab,每小时运行一次:
0 * * * * /usr/local/bin/vacuum-journal.sh
用 logrotate 实现标准日志轮转
对于 /var/log/ 下的传统文本日志(如 messages、secure、nginx/access.log),logrotate 是官方推荐方案,配置一次即可长期生效:
- 在 /etc/logrotate.d/myapp 中添加规则:
/var/log/myapp/*.log {
daily
rotate 7
compress
missingok
notifempty
create 644 root root
} - 该配置表示:每天轮转、保留 7 份、自动压缩、空文件不处理、新建日志权限为 644
- logrotate 本身由系统级 cron(/etc/cron.daily/logrotate)每日调用,无需额外配置
自定义 find + crontab 清理非标日志
当业务日志命名不规范、路径分散或需按分钟级时间判断时,shell 脚本更灵活:
- 例如清理 /data/logs/ 下所有 7 天前的 .log 和 .err 文件:
find /data/logs -type f ( -name "*.log" -o -name "*.err" ) -mtime +7 -delete - 安全起见,首次运行前可先用 -print 预览:
find /data/logs -name "*.log" -mtime +7 -print - 加到 crontab(每天凌晨 3 点执行):
0 3 * * * /usr/local/bin/clean-data-logs.sh
磁盘水位联动清理防爆满
单纯定时不够智能。建议在脚本中加入空间检查逻辑,避免“清了又满”:
- 在清理脚本开头加入判断:
if [ $(df /var | awk 'NR==2 {print $5}' | sed 's/%//') -gt 90 ]; then
journalctl --vacuum-size=100M
find /var/log -type f -name "*.log" -mtime +3 -delete
fi - 这样当 /var 分区使用率超 90%,就触发一次深度清理,兼顾日常维护与应急响应
相关文章
- 阴阳师残局得胜破霆劫怎么打详情 07-13
- 《和平精英》安卓转苹果手机教程-详细转区步骤解析 07-13
- 36氪app如何删除浏览记录 36氪APP删除浏览记录方法 07-13
- 阴阳师源氏秘造挑战初试之兵阵容推荐详情 07-13
- 36氪app怎么开启深色模式 36氪app开启深色模式方法 07-13
- Linux使用-route命令查看与修改IP路由表 07-13