rsyslog 不以固定文件大小旋转

JD1*_*910 5 logging rsyslog

我正在尝试为 Linux 中的应用程序创建一个单独的日志文件。到目前为止,我已经创建了一个 .conf 脚本来根据程序名称分隔自定义日志文件中的日志,并且它工作正常。

但是,我想将日志文件的大小限制为 10K,并且我正在$outchannel为此目的使用日志文件。该脚本存储为/etc/rsyslog.d/00-abc_log.conf

$outchannel o_abc, /var/log/abc.log, 10240, /home/xyz/logrot
if $programname == 'abc' then :omfile:$o_abc
Run Code Online (Sandbox Code Playgroud)

脚本/home/xyz/logrot包含以下内容:

mv -f /var/log/abc.log /var/log/abc.log.1
Run Code Online (Sandbox Code Playgroud)

低于 10K 限制时,日志记录可以正常工作,但在日志超过 10K 大小限制后,不会生成文件 abc.log.1 并且 abc.log 中的日志记录会停止。

如果重要的话,我的系统正在运行 Xubuntu 12.04 rsyslog-5.8.6

提前致谢。

ger*_*ijk 3

出现问题的原因是,将文件描述符移动到文件系统后,应用程序仍然打开文件描述符。除非您可以告诉程序在移动后直接重新启动日志记录(通常对于守护程序,有一个类似的信号SIGHUP),否则您将不得不使用另一种方法进行轮换,而不是移动当时写入的文件

logrotate我建议像下面这样使用。尚未对其进行测试,因为您尚未共享所涉及的应用程序。

创建您自己的 logrotate 配置文件,例如abclogrotate.conf

/var/log/abc.log {
    # don't use time based rotation, but size-based
    size 10k
    # don't move, but copy-and-truncate so the application won't have to be
    # told that the file has moved.
    copytruncate
    # maximum of one old file
    rotate 1
    # counting old files starts at 1 rather than 0
    start 1
    # don't use compression
    nocompress
}
Run Code Online (Sandbox Code Playgroud)

现在像这样调用 logrotate:logrotate /path/to/abclogrotate.conf而不是您自己的脚本。