我刚刚意识到,自从升级到 22.04.1 后,logrotate 就不起作用了。系统日志已经很多天没有轮换了。它应该由 systemd 计时器运行,并且相关计时器被激活:
\n# systemctl list-timers\nNEXT LEFT LAST PA>\nThu 2022-09-15 23:09:00 CEST 20min left Thu 2022-09-15 22:39:22 CEST 9m>\nThu 2022-09-15 23:30:42 CEST 42min left Thu 2022-09-15 22:33:38 CEST 14>\nThu 2022-09-15 23:55:00 CEST 1h 6min left Wed 2022-09-14 23:55:05 CEST 22>\nFri 2022-09-16 00:00:00 CEST 1h 11min left n/a n/>\nFri 2022-09-16 00:00:00 CEST 1h 11min left Thu 2022-09-15 00:00:01 CEST 22>\nFri 2022-09-16 02:35:57 CEST 3h 47min left Thu 2022-09-15 02:35:57 CEST 20>\nFri 2022-09-16 02:46:01 CEST 3h 57min left Thu 2022-09-15 02:46:01 CEST 20>\nFri 2022-09-16 03:22:12 CEST 4h 33min left Thu 2022-09-15 10:43:31 CEST 12>\nFri 2022-09-16 04:26:17 CEST 5h 37min left Thu 2022-09-15 22:04:50 CEST 43>\nFri 2022-09-16 06:28:52 CEST 7h left Thu 2022-09-15 06:39:52 CEST 16>\nFri 2022-09-16 06:54:45 CEST 8h left Thu 2022-09-15 00:59:05 CEST 21>\nFri 2022-09-16 07:27:18 CEST 8h left Thu 2022-09-15 20:08:18 CEST 2h>\nFri 2022-09-16 10:23:45 CEST 11h left Thu 2022-09-15 19:41:01 CEST 3h>\nSun 2022-09-18 03:10:01 CEST 2 days left Sun 2022-09-11 03:11:05 CEST 4 >\nMon 2022-09-19 00:14:45 CEST 3 days left Mon 2022-09-12 00:40:35 CEST 3 >\nSun 2022-09-25 02:14:00 CEST 1 week 2 days left Sun 2022-09-11 10:56:49 CEST 4 >\n\n16 timers listed.\nRun Code Online (Sandbox Code Playgroud)\n根据系统日志,logrotate 也在运行:
\nSep 14 00:00:08 server1 systemd[1]: logrotate.service: Deactivated successfully.\nSep 14 02:30:41 server1 systemd[1]: logrotate.timer: Deactivated successfully.\nSep 15 00:00:01 server1 systemd[1]: logrotate.service: Deactivated successfully.\nSep 15 02:30:42 server1 systemd[1]: logrotate.timer: Deactivated successfully.\nRun Code Online (Sandbox Code Playgroud)\n也得到了 systemd 的确认:
\n# systemctl status logrotate.timer\n\xe2\x97\x8f logrotate.timer - Daily rotation of log files\n Loaded: loaded (/lib/systemd/system/logrotate.timer; enabled; vendor prese>\n Active: active (waiting) since Thu 2022-09-15 02:30:57 CEST; 20h ago\n Trigger: Fri 2022-09-16 00:00:00 CEST; 1h 8min left\n Triggers: \xe2\x97\x8f logrotate.service\n Docs: man:logrotate(8)\n man:logrotate.conf(5)\n\nSep 15 02:30:57 server1 systemd[1]: Started Daily rotation of log fil\nRun Code Online (Sandbox Code Playgroud)\n但没有日志被旋转。当我按照 logrotate.service 中指定的方式手动启动 logrotate 时,没有任何反应(没有输出,没有日志旋转):
\nroot@server1:/usr/lib/systemd/system# /usr/sbin/logrotate /etc/logrotate.conf\nroot@server1:/usr/lib/systemd/system#\nRun Code Online (Sandbox Code Playgroud)\n然后,当我使用 -vf 启动 logrotate 查看问题所在时,日志确实已旋转:
\nroot@server1:/usr/lib/systemd/system# /usr/sbin/logrotate -vf /etc/logrotate.conf\nreading config file /etc/logrotate.conf\nincluding /etc/logrotate.d\nRun Code Online (Sandbox Code Playgroud)\n我应该如何调试它并让 logrotate 定期运行?
\n小智 7
我遇到了与更新后出现的相同症状的问题。就我而言,它是从 Ubuntu 21.10 到 22.04。
我能够运行:
logrotate /etc/logrotate.d/rsyslog --debug
Run Code Online (Sandbox Code Playgroud)
这是最相关的错误:
错误:跳过“/var/log/syslog”,因为父目录具有不安全的权限(它是世界可写的或非“root”的组可写)在配置文件中设置“su”指令以告诉 logrotate 应使用哪个用户/组用于旋转。
检查哪个组分配给 /var/log 您可以在我的例子中看到它是 syslog。
ls -alh /var/
drwxrwxr-x 16 root syslog 4.0K Sep 27 19:25 log
Run Code Online (Sandbox Code Playgroud)
我将下面的行添加到 /etc/logrotate.d/rsyslog
su syslog syslog
Run Code Online (Sandbox Code Playgroud)
最后我的 /etc/logrotate.d/rsyslog 文件看起来像这样。
/var/log/syslog
/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
{
su syslog syslog
rotate 4
weekly
missingok
notifempty
compress
delaycompress
sharedscripts
postrotate
/usr/lib/rsyslog/rsyslog-rotate
endscript
}
Run Code Online (Sandbox Code Playgroud)
通过这些编辑,我能够再次运行它,上面看到的错误消失了。我从命令末尾删除了 --debug 并重新运行它。系统日志文件与其他有错误的文件一起轮换。
logrotate /etc/logrotate.d/rsyslog --debug
Run Code Online (Sandbox Code Playgroud)