rsyslog 不会以固定文件大小旋转

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

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

mv -f /var/log/abc.log /var/log/abc.log.1

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

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

提前致谢。

答案1

出现问题的原因是,在将文件描述符移到文件系统后,应用程序仍打开该文件描述符。除非您可以告诉程序在移动后直接重新启动日志记录(通常对于守护进程,会有一个信号,如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
}

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

相关内容