我无法轮换我网站的访问日志。默认日志文件可以正常轮换,权限和 logrotate conf 文件行也与这些文件相同,但由于某种原因,它们没有被触及。我在系统日志或有关它的消息中找不到任何错误。
旋转精细:
$ l /var/log/hiawatha/
-rw-r----- 1 www-data www-data 442604 Oct 31 06:03 access.log
-rw-r----- 1 www-data www-data 478300 Oct 28 06:12 access.log.1
-rw-r----- 1 www-data www-data 8295 Aug 26 05:24 access.log.10.gz
-rw-r----- 1 www-data www-data 12156 Aug 21 06:14 access.log.11.gz
不旋转:
$ l /var/www/my_site/log/
-rw-r----- 1 www-data www-data 309498755 Oct 31 07:26 access.log
-rw-r----- 1 www-data www-data 14218318 Oct 31 05:00 error.log
Logrotate配置:
$ more /etc/logrotate.d/hiawatha
/var/log/hiawatha/access.log {
weekly
compress
delaycompress
rotate 52
missingok
create 640 www-data www-data
sharedscripts
postrotate
/usr/bin/killall -HUP hiawatha
endscript
}
/var/www/my_site/log/*.log {
weekly
compress
delaycompress
rotate 52
missingok
create 640 www-data www-data
sharedscripts
postrotate
/usr/bin/killall -HUP hiawatha
endscript
}
谢谢。
按照下面的 Server Fault 的建议,使用 -vf 手动运行命令后会获得更多信息。我认为 -f 是使事情正常运转的原因,因为我运行了以下命令:
sudo /usr/sbin/logrotate /etc/logrotate.conf
...之前没有结果。请注意,尽管我几秒钟前刚刚运行了该命令(没有 -f),但有一行写着“上次轮换时间为 2018-10-31 06:00”,所以不知何故,即使日志没有轮换,它也将日志标记为轮换。但使用 -f 运行:
sudo /usr/sbin/logrotate -vf /etc/logrotate.conf
...产生了以下输出(修剪以仅显示与此问题相关的行)。我没有看到任何迹象表明为什么它之前不起作用,但希望它只是第一次需要强制执行,从现在开始它就会起作用:
rotating pattern: /var/www/my_site/log/*.log forced from command line (52 rotations)
empty log files are rotated, old logs are removed
considering log /var/www/my_site/log/access.log
Now: 2018-11-02 16:29
Last rotated at 2018-10-31 06:00
log needs rotating
{...}
considering log /var/www/my_site/log/error.log
Now: 2018-11-02 16:29
Last rotated at 2018-10-31 06:00
log needs rotating
{...}
rotating log /var/www/my_site/log/access.log, log->rotateCount is 52
dateext suffix '-20181102'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
previous log /var/www/my_site/log/access.log.1 does not exist
renaming /var/www/my_site/log/access.log.52.gz to /var/www/my_site/log/access.log.53.gz (rotatecount 52, logstart 1, i 52),
old log /var/www/my_site/log/access.log.52.gz does not exist
renaming /var/www/my_site/log/access.log.51.gz to /var/www/my_site/log/access.log.52.gz (rotatecount 52, logstart 1, i 51),
{...}
log /var/www/my_site/log/error.log.53.gz doesn't exist -- won't try to dispose of it
renaming /var/www/my_site/log/access.log to /var/www/my_site/log/access.log.1
creating new /var/www/my_site/log/access.log mode = 0640 uid = 33 gid = 33
renaming /var/www/my_site/log/error.log to /var/www/my_site/log/error.log.1
creating new /var/www/my_site/log/error.log mode = 0640 uid = 33 gid = 33
running postrotate script
答案1
尝试在详细模式下手动运行 logrotate,看看是否有任何异常。例如:logrotate -vf /etc/logrotate.conf
。这将要强制轮换所有日志,并 HUP 所有配置的守护进程。请注意,这可能会导致服务间歇性不可用。
如果详细输出中没有出现任何内容,请开始注释行,/etc/logrotate.d/hiawatha
直到出现效果。我猜想,我怀疑 postrotate 行会引起问题,所以也许可以从那里开始。