我正在尝试为 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。
提前致谢。
出现问题的原因是,将文件描述符移动到文件系统后,应用程序仍然打开文件描述符。除非您可以告诉程序在移动后直接重新启动日志记录(通常对于守护程序,有一个类似的信号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而不是您自己的脚本。
| 归档时间: |
|
| 查看次数: |
13572 次 |
| 最近记录: |