syslog-ng 3.2.5 服务器停止接收数据,可能与 logrotate 有关

syslog-ng 3.2.5 服务器停止接收数据,可能与 logrotate 有关

我在 Unix 和 Linux 中问过这个问题,但我认为它实际上更适合这里。

目前,我使用以下 logrotate.d 配置

/var/log/messages 
{
    daily
    compress
    rotate 7
    postrotate
            /bin/kill -HUP `cat /var/run/syslog-ng.pid 2> /dev/null` 2> /dev/null || true
    endscript
}

然而,我在 syslog-ng 存储库中的官方 logrotate 示例中看到,他们没有执行 kill -HUP,而是执行了重新加载,例如:

/var/log/syslog.log {
   rotate 7
   daily
   compress
   postrotate
      /etc/init.d/syslog-ng reload >/dev/null
  endscript
}

这两种方法之间是否存在显著差异,导致他们的方法有效而我的方法无效,或者您认为存在其他问题?这是一个相当旧的 syslog-ng 版本,所以我不确定这是否也相关。

为了提供更多背景信息,下面是我版本的 syslog-ng 的 init 脚本中的重新加载功能。

reload()
{
        verify_config
        echo -n $"Reloading syslog-ng: "
        killproc syslog-ng -HUP
        RETVAL=$?
        echo
        return $RETVAL
}

当系统处于故障状态时,我确实检查了 lsof、可用内存等,并没有发现系统状态有任何过于可疑的情况。

答案1

该问题与 logrotate 无关,通过更新到较新的 syslog-ng 版本(至 3.9.1),该问题似乎已得到解决。我认为根本原因是服务器负载量导致的错误。我可以说这不是 postrotate 的问题,因为两个示例都成功重新加载了服务,而在旧版本上,在这两个示例之间进行更改最终并没有改变崩溃行为。

相关内容