Linux服务器日志文件过大是常见问题,主要原因包括: - 系统/应用持续运行产生大量日志 - 日志轮转(Log Rotation)配置不当或未启用 - 调试日志未及时关闭 - 异常情况导致大量错误日志
系统日志:
/var/log/messages
- 常规系统消息/var/log/syslog
- 系统日志/var/log/kern.log
- 内核日志/var/log/auth.log
- 认证日志服务日志:
/var/log/nginx/
- Nginx日志/var/log/apache2/
- Apache日志/var/log/mysql/
- MySQL日志/var/log/redis/
- Redis日志使用logrotate
工具管理日志轮转:
# 查看当前logrotate配置
cat /etc/logrotate.conf
ls /etc/logrotate.d/
# 示例Nginx日志轮转配置(/etc/logrotate.d/nginx)
/var/log/nginx/*.log {
daily
missingok
rotate 30
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
postrotate
/etc/init.d/nginx reload > /dev/null
endscript
}
# 清空日志文件(保留文件)
> /var/log/large.log
# 删除旧日志
find /var/log -type f -name "*.log" -mtime +30 -delete
# 按大小查找大日志文件
find /var/log -type f -size +100M -exec ls -lh {} \;
对于应用日志,降低不必要的日志级别:
- 修改应用配置文件中的日志级别(如从DEBUG改为INFO)
- 对于systemd服务:journalctl --vacuum-size=200M
创建定期清理脚本(/usr/local/bin/clean_logs.sh
):
#!/bin/bash
# 清理30天前的日志
find /var/log -name "*.log" -type f -mtime +30 -delete
# 清空某些特定日志
echo "" > /var/log/syslog
echo "" > /var/log/messages
添加到cron任务:
crontab -e
# 添加以下内容
0 3 * * * /usr/local/bin/clean_logs.sh
rm -f
命令通过以上方法,可以有效管理和控制Linux服务器的日志大小问题。