为什么 logrotate 无法处理特定日志文件?权限和配置相同。Debian Linux

为什么 logrotate 无法处理特定日志文件?权限和配置相同。Debian Linux

我无法轮换我网站的访问日志。默认日志文件可以正常轮换,权限和 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 行会引起问题,所以也许可以从那里开始。

相关内容