一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

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%,就触发一次深度清理,兼顾日常维护与应急响应

热门栏目