尽管 logrotate 配置存在,但我们的日志文件/var/log/syslog
似乎没有旋转:/etc/logrotate.d/rsyslog
/var/log/syslog
{
rotate 7
daily
missingok
notifempty
delaycompress
compress
postrotate
reload rsyslog >/dev/null 2>&1 || true
endscript
}
/var/log/mail.info
/var/log/mail.warn
/var/log/mail.err
/var/log/mail.log
/var/log/daemon.log
/var/log/kern.log
/var/log/auth.log
/var/log/user.log
/var/log/lpr.log
/var/log/cron.log
/var/log/debug
/var/log/messages
{
rotate 4
weekly
missingok
notifempty
compress
delaycompress
sharedscripts
postrotate
reload rsyslog >/dev/null 2>&1 || true
endscript
}
你看,syslog
日志文件有 600M,没有旧文件或压缩文件。
-rw-r----- 1 syslog adm 600M Nov 9 20:30 syslog
答案1
我发现了问题,不知何故su
指令被从中删除了/etc/logrotate.conf
,因此需要添加:
# use the syslog group by default, since this is the owning group
# of /var/log/syslog.
su root syslog
答案2
我也用了同样的su
方法@Justin 提到,除了我必须将它添加到特定于服务的 logrotate 配置文件中(而不是全局 logrotate 配置文件):
su
从全局 logrotate 配置文件中确定要使用的用户/组grep 'su ' "/etc/logrotate.conf"
编辑 rsyslog logrotate 配置
vi "/etc/logrotate.d/rsyslog"
将
su
步骤 1 中的行添加到文件顶部:su root syslog
测试错误
logrotate --debug --force /etc/logrotate.d/rsyslog 2>&1 | grep -i cron
答案3
logrotate
我遇到了类似的问题,这似乎是由于配置和新systemd
替代品之间的某种不兼容造成的sysv
。init.d
我不得不编辑/etc/logrotate.d/rsyslog
并替换
invoke-rc.d rsyslog rotate > /dev/null
和
systemctl kill -s HUP --kill-who=main rsyslog.service
前一行看起来正在工作,并且这么说,但是没有设法让 rsyslog 重新打开其日志文件。
答案4
基于塞缪尔的评论, 修改的/usr/lib/rsyslog/rsyslog-rotate
#!/bin/sh
if [ -d /run/systemd/system ]; then
systemctl kill -s HUP --kill-who=main rsyslog.service
else
invoke-rc.d rsyslog rotate > /dev/null
fi