logrotate是CentOS默认的日志轮转工具,可自动压缩、删除旧日志,避免手动操作。
/etc/logrotate.conf,特定服务(如nginx、rsyslog)的配置通常位于/etc/logrotate.d/目录下。可直接编辑主文件或创建新配置文件(如/etc/logrotate.d/myapp),示例如下:/var/log/myapp/*.log {
daily # 每天轮转
rotate 7 # 保留7个旧日志文件
compress # 压缩旧日志(如.gz格式)
missingok # 日志文件丢失时不报错
notifempty # 日志为空时不轮转
create 640 root adm # 创建新日志文件,权限640,属主root,属组adm
}
sudo logrotate -f /etc/logrotate.conf强制执行轮转,检查/var/lib/logrotate/status查看轮转状态。若需立即清理,可使用以下命令(操作前建议备份重要日志):
/var/log/messages:sudo truncate -s 0 /var/log/messages
find命令查找并清空/var/log目录下所有.log文件:sudo find /var/log -type f -name "*.log" -exec truncate -s 0 {} \;
/var/log目录下30天前的.log文件(谨慎使用):sudo find /var/log -type f -name "*.log" -mtime +30 -exec rm -f {} \;
systemd的日志由journald服务管理,可通过以下命令回收:
sudo journalctl --vacuum-size=100M
sudo journalctl --vacuum-time=2weeks
/var/log/journal/(默认路径),可清空该目录(需重启journald服务):sudo systemctl stop systemd-journald
sudo rm -rf /var/log/journal/*
sudo systemctl start systemd-journald
/etc/systemd/journald.conf,设置SystemMaxUse=16M(最大16MB),然后重启服务:sudo systemctl restart systemd-journald
为避免日志堆积,可设置定时任务(cron)定期执行清理:
/usr/local/bin/cleanup_logs.sh,内容如下:#!/bin/bash
# 清空/tmp目录下的临时文件
rm -rf /tmp/*
# 清空/var/log目录下7天前的.log文件
find /var/log -type f -name "*.log" -mtime +7 -exec rm -f {} \;
sudo chmod +x /usr/local/bin/cleanup_logs.sh
crontab -e,添加以下行(每天凌晨2点执行):0 2 * * * /usr/local/bin/cleanup_logs.sh >> /var/log/cleanup.log 2>&1
注意事项:
/var/log/messages、/var/log/secure)建议先备份再清理;logrotate、rsyslog、systemd-journald)使配置生效。