logrotate 不会压缩和删除 syslog 模板文件

logrotate 不会压缩和删除 syslog 模板文件

我在中央 syslog 服务器上遇到了一个非常奇怪的问题,即 logrotate 和 syslog 文件。发生的情况是,执行 logrotate 时,syslog 模板生成的文件不会被压缩或删除。其他文件会按预期压缩和轮换。

syslog 模板示例:

    template(name="apache_log" type="string"
     string="/data/logs/apache.log")

    if $syslogtag startswith '(httpd' then {
      action(type="omfile" DynaFile="apache_log" Template="RSYSLOG_SyslogProtocol23Format"
        DirCreateMode="0750" dirOwner="root" dirGroup="logs"
        FileCreateMode="0640" fileOwner="root" fileGroup="logs")
    stop
} 

local2.*  action(name="local2_messageslog" type="omfile"  File="/data/logs/messages")

logrotate示例:

$cat /etc/logrotate.d/syslog

/data/logs/messages
/data/logs/apache.log
{
    sharedscripts
    missingok
    daily
    rotate 4
    postrotate
        /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
    endscript
}

问题:

-rw-r----- 1 root logs  2910357960 Nov  9 03:53 messages
-rw-r----- 1 root logs  1725989639 Nov  6 00:01 messages-20231106.gz
-rw-r----- 1 root logs  1852598019 Nov  7 00:01 messages-20231107.gz
-rw-r----- 1 root logs  2209372695 Nov  8 00:01 messages-20231108.gz
-rw-r----- 1 root logs  2036382265 Nov  9 00:01 messages-20231109.gz

-rw-r----- 1 root logs    82458243 Nov  9 03:53 apache.log
-rw-r----- 1 root logs   501509524 Nov  1 00:01 apache.log-20231101
-rw-r----- 1 root logs   596170609 Nov  2 00:00 apache.log-20231102
-rw-r----- 1 root logs   528313043 Nov  3 00:00 apache.log-20231103
-rw-r----- 1 root logs   475893564 Nov  4 00:00 apache.log-20231104
-rw-r----- 1 root logs    26731791 Nov  5 00:00 apache.log-20231105.gz
-rw-r----- 1 root logs    26634166 Nov  6 00:01 apache.log-20231106.gz
-rw-r----- 1 root logs   518016884 Nov  7 00:01 apache.log-20231107
-rw-r----- 1 root logs   507646042 Nov  8 00:01 apache.log-20231108
-rw-r----- 1 root logs   501009363 Nov  9 00:00 apache.log-20231109

“消息”日志文件按预期轮换和压缩。只有 4 个轮换文件。但是,对于 apache 日志(syslog 模板化文件),有些文件已压缩,有些则未压缩。此外,有些日志文件已有 8 天的历史。Logrotate 配置为仅保留 4 天。有什么想法可能导致此行为?

Apache 日志来自另一个系统。本地没有运行 Apache 进程。

ps. logrotate 默认文件上设置了 compress 指令

答案1

您正在向 posprocessing 阶段的 syslogd 进程发送 HUP 信号,以指示守护进程应重新加载配置并开始写入新消息文件,但您没有对 apache 执行相同的操作。如果您使用的是 systemd(如果不是,则应使用 /etc/init.d/apache2 reload),则应使用类似于以下的 postrotate 部分

postrotate
   systemctl reload apache2

在某些系统中,apache 服务不是 apache2,而是 httpd

相关内容