Linux服务器日志文件不断增长会导致以下问题: - 占用大量磁盘空间 - 影响系统性能 - 增加日志分析难度 - 可能导致系统崩溃
logrotate是Linux自带的日志轮转工具,可以自动压缩、轮转和删除日志文件。
sudo nano /etc/logrotate.d/nginx
添加以下内容:
/var/log/nginx/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
postrotate
/etc/init.d/nginx reload > /dev/null
endscript
}
daily/weekly/monthly
:轮转周期rotate 7
:保留7个旧日志文件compress
:使用gzip压缩旧日志delaycompress
:延迟压缩前一个日志文件missingok
:如果日志不存在则跳过notifempty
:如果日志为空则不轮转size 100M
:当日志达到100MB时轮转对于不支持logrotate的服务,可以创建自定义脚本:
#!/bin/bash
# 日志文件路径
LOG_FILE="/var/log/myapp.log"
# 备份日志路径
BACKUP_LOG="/var/log/myapp-$(date +%Y-%m-%d-%H%M%S).log"
# 复制当前日志
cp "$LOG_FILE" "$BACKUP_LOG"
# 清空当前日志
cat /dev/null > "$LOG_FILE"
# 可选:压缩旧日志
gzip "$BACKUP_LOG"
# 可选:删除超过30天的日志
find /var/log -name "myapp-*.log.gz" -mtime +30 -exec rm {} \;
对于使用systemd的系统,可以配置journald:
sudo nano /etc/systemd/journald.conf
修改以下参数:
[Journal]
Storage=persistent
SystemMaxUse=1G
SystemMaxFileSize=100M
SystemMaxFiles=10
然后重启journald:
sudo systemctl restart systemd-journald
设置监控脚本定期检查日志大小:
#!/bin/bash
LOG_FILE="/var/log/large.log"
MAX_SIZE="100" # MB
current_size=$(du -m "$LOG_FILE" | cut -f1)
if [ "$current_size" -gt "$MAX_SIZE" ]; then
echo "日志文件过大 ($current_size MB),需要处理" | mail -s "日志警报" admin@example.com
fi
如果日志切割后服务不写入新日志: 1. 检查文件权限是否正确 2. 确认服务是否支持SIGHUP信号重新加载日志文件 3. 某些服务可能需要完全重启才能识别新的日志文件
通过以上方法,可以有效管理Linux服务器日志,防止日志溢出问题,同时保留必要的日志信息用于故障排查和系统监控。