Logrotate 配置:它可以工作,但始终保持“当前”日志为空

Logrotate 配置:它可以工作,但始终保持“当前”日志为空

我将日志记录移到openvpn它自己的日志中并尝试为其设置日志轮换,但我显然做错了什么。

日志记录按预期进行,但始终记录到第二个日志文件中openvpn.log.1。“当前”日志文件openvpn.log存在,但始终为空。

-rw------- 1 root root     0 Apr 20 07:35 openvpn.log
-rw------- 1 root root  5411 Apr 20 07:58 openvpn.log.1

这是我的 openvpn 的 logrotate 配置文件。

/var/log/openvpn.log {
       daily
       rotate 7
       delaycompress
       compress
       notifempty
       missingok
}

Openvpn 中有关日志记录的内容server.conf

log-append /var/log/openvpn.log

我把什么事情搞砸了?

答案1

根据这篇旧帖子在 openvpn-users 邮件列表上:

openvpn 日志记录是通过将 stdout/stderr 重定向到日志文件来完成的

所以解决方案是使用copytruncatelogrotate 配置中的选项:

复制截断

在创建副本后,将原始日志文件原地截断为零大小,而不是移动旧日志文件并选择性地创建新日志文件。当某些程序无法关闭其日志文件并因此可能继续永久写入(附加)前一个日志文件时,可以使用此选项。请注意,复制文件和截断文件之间的时间间隔非常短,因此可能会丢失一些日志数据。使用此选项时,创建选项将不起作用,因为旧日志文件保留在原处。

这是我的/etc/logrotate.d/openvpn文件中的内容:

/var/log/openvpn.log {
    weekly
    rotate 12
    copytruncate
    compress
    delaycompress
    missingok
    notifempty
}

答案2

您应该让您的服务了解日志轮换。某些服务可能会因 HUP 信号而被终止,而某些服务可能需要完全重启。服务可能会打开该openvpn.log文件,并将其重命名为openvpn.log.1

尝试添加:

postrotate
    systemctl restart openvpn.service
endscript

我不清楚您的服务具体怎么调用,所以我的猜测openvpn.service可能是错的。

相关内容