目录
问题
通过监控发现服务器的系统盘占用越来越大,就快没有空间了,通过寻找大文件大目录发现是/var/log/messages
文件占用的多。tail -f
查看了一下还在不断的打印,这是某个业务系统的日志,因为使用 systemd 管理,所以打印在这里。
可以看到现在日志是这样一个状态:
messages
messages-20220417
messages-20220424
messages-20220501
messages-20220508
不带后缀的 messages
是最新的日志,带日期的是滚动存储的日志,每周一个。
问题解决
方案一
纯手动。
sudo -c "cat /dev/null > /var/log/messages"
把日志清了。以后定时关注磁盘的占用情况,不够用了再来删。
方案二
定时删。
使用 cron job 定时执行 cat /dev/null > /var/log/messages
清理。但是直觉认为太暴力了,应该有更好的方式。
方案三
正确的姿势。
稍微 google 了一下,这个日志文件本来就是由 logrotate
来管理的,默认是保留4周,滚动删除,所以只要改下 logrotate
的配置就好,改成保留 5 天的日志,滚动删除。
主配置文件在 /etc/logrotate.conf
提供默认配置,同时会加载 /etc/logrotate.d
目录中的配置,可以覆写默认配置(是不是觉得和 nginx 、.bashrc/.bash_profile很像)。
/var/log/messages
的配置在 /etc/logrotate.d/syslog
/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
daily
rotate 5
missingok
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
endscript
}
这是我新加的
daily
rotate 5
副作用:
这么一改,这几个日志文件的配置全部受影响
/var/log/spooler
/var/log/secure
/var/log/message
/var/log/maillog
/var/log/cron
debug 试运行
sudo logrotate -d /etc/logrotate.conf
-d
option 可以以 debug 执行 logrotate,看看是不是你想要的结果(这是一个dry run)。
没有问题就可以 -f
强制刷新一下主配置(同时会将副配置include进来),如果不刷新配置也没关系,默认一天会刷新一次(cron job)
sudo logrotate -f /etc/logrotate.conf
当然你刷新单个配置也是可以的:
logrotate -f /etc/logrotate.d/nginx
P.s. logrotate
是 1996 年就出现的日志管理工具,不仅可以管理系统日志,也适合管理应用日志,配置一下就行,有现成的工具就不用自己造轮子了。
最新评论