linux日志过大应优先用logrotate自动轮转压缩,配置daily、rotate 14、compress等参数;调低rsyslog或应用日志级别(如debug→info);nohup.out需脚本切分+定时清理;日志移至独立分区并加磁盘监控。

Linux 日志过大,核心是防止单个文件无限制增长、避免磁盘被占满。最稳妥高效的方式不是手动删,而是用系统级机制自动管理——logrotate 是首选方案,辅以日志级别调优和存储路径优化。
用 logrotate 自动轮转压缩
logrotate 是 Linux 发行版默认集成的日志管理工具,能按时间或大小自动切分、压缩、清理旧日志。
- 编辑服务专属配置,比如为自定义应用日志添加:/var/log/myapp/*.log {
daily
rotate 14
compress
delaycompress
missingok
notifempty
create 644 root root
} - 保存后运行
sudo logrotate -d /etc/logrotate.conf测试语法,无报错再执行sudo logrotate /etc/logrotate.conf手动触发一次 - 确认生效:第二天会生成类似
myapp.log.1.gz的压缩归档,原日志清空重建
控制日志产出量
源头减量比后期清理更治本。重点检查 rsyslog 或应用自身的日志级别:
- 修改
/etc/rsyslog.conf,把过度详细的debug或trace级别关掉,例如将*.debug改为*.info - 对 Java 应用,调整
logback.xml或logging.properties中的level;对 Python 脚本,检查logging.basicConfig(level=...) - 重启对应服务:如
sudo systemctl restart rsyslog或重启你的应用进程
处理 nohup.out 这类特殊日志
nohup.out 不受 logrotate 管理,需单独应对:
- 不推荐直接重定向到
/dev/null(丢失所有输出),建议改用带轮转的启动方式:nohup your-command > nohup_$(date +\%Y\%m\%d).log 2>&1 & - 或写小脚本定期切分:
split -b 50M -d -a 3 nohup.out logs/nohup_$(date -d "-1 day" +\%Y\%m\%d)_
再配合find logs/ -name "nohup_*" -mtime +7 -delete清理旧块 - 最后清空原文件:
truncate -s 0 nohup.out(比cat /dev/null > ...更安全)
调整存储位置与监控预警
把日志移到独立分区或大容量挂载点,能避免影响根分区可用性:
- 新建目录如
/data/logs,修改 logrotate 配置中的路径,或在应用启动脚本中指定日志输出路径 - 加一条简单监控:每天检查
du -sh /var/log | awk '$1 > 2000 {print "ALERT: /var/log > 2GB"}',配合 cron 发邮件或写入告警日志 - 对关键服务,可设
maxsize 100M替代daily,实现“写满即切”,更适应高流量场景











