CentOS清理系统日志的策略
journalctl是CentOS 7及以上版本管理systemd日志的核心工具,可通过以下命令快速清理:
journalctl --vacuum-time=2weeks;journalctl --vacuum-size=1G;journalctl --vacuum-files=10;journalctl --disk-usage确认当前日志占用空间。logrotate是CentOS默认的日志轮转工具,可自动完成日志的压缩、删除和重建,避免单一日志文件过大:
/etc/logrotate.conf,设置通用规则(如每日轮转、保留7份、压缩),示例:daily
rotate 7
compress
delaycompress
missingok
notifempty
create 640 root adm
/etc/logrotate.d/nginx),示例:/var/log/nginx/*.log {
daily
rotate 30
compress
missingok
notifempty
create 640 root adm
sharedscripts
postrotate
/bin/kill -USR1 `cat /var/run/nginx.pid 2>/dev/null` 2>/dev/null || true
endscript
}
其中postrotate脚本用于日志轮转后通知服务重新打开日志文件。对于不需要保留的特定日志文件,可通过以下命令手动清理(操作前建议备份):
truncate命令快速清空大日志文件(如/var/log/messages),命令:truncate -s 0 /var/log/messages;find命令查找并删除指定时间前的日志(如30天前的.log文件),命令:find /var/log -type f -name "*.log" -mtime +30 -exec rm -f {} \;;rm -rf /var/log/*。通过降低不必要的服务日志级别,减少日志生成量:
/etc/rsyslog.conf,调整服务日志级别(如将mail服务日志级别设为warning),示例:mail.none /var/log/maillog
*.warning /var/log/syslog
修改后重启rsyslog服务:systemctl restart rsyslog;/etc/systemd/journald.conf,设置日志存储参数(如最大使用100M、不转发到syslog),示例:SystemMaxUse=100M
ForwardToSyslog=no
修改后重启journald服务:systemctl restart systemd-journald。通过cron定时任务定期执行清理操作,避免手动干预:
crontab -e添加定时任务,例如每天凌晨2点执行logrotate:0 2 * * * /usr/sbin/logrotate /etc/logrotate.conf
或每天凌晨3点清空指定日志文件:0 3 * * * find /var/log -type f -name "*.log" -exec truncate -s 0 {} \;
保存后cron会自动加载任务。