Rsyslog

強制 rsyslogd 在有人寫入之前創建新文件

  • March 13, 2019

我在 Ubuntu 14.04 上使用 rsyslogd 7.4.4。我已經使用以下內容更新了配置文件*/etc/rsyslog.d/30-component.conf :*

# provides UDP syslog reception
$ModLoad imudp
$UDPServerRun 514
$EscapeControlCharactersOnReceive off

$outchannel network,/var/log/component/network.log,10240000,/usr/home/component/bin/./rotate.sh /var/log/component/network.log

if $programname == 'Network' then :omfile:$network
if $programname == 'Network' then stop

if $programname == 'Network' then /var/log/gwc/network.log

有時我需要手動刪除network.log文件。在那之後,我總是不得不重新啟動守護程序。問題是在有人寫入適當的系統日誌通道(在我的情況下為“網路”)之前,不會創建新文件。但我想擁有network.log文件,即使它是空的。

前段時間,我在 Ubuntu 10.04 上使用了 rsyslogd 4.2.0,配置幾乎相同。唯一的區別是“ ~ ”被替換為“ stop ”並且引入了“ :omfile: ”。使用該版本,一切都很好,並且在重新啟動守護程序後創建了新文件。

我想使用 rsyslogd 4.2.0 下一行會導致文件新創建:

if $programname == 'Network' then /var/log/gwc/network.log

但它似乎不適用於 7.4.4。如何使用新版本實現這種舊版本行為?

Rsyslog 5.x+ 不會創建文件(或打開網路連接),直到它具有與該過濾器匹配的日誌條目。

這是與早期與解決刪除權限問題相關的行為的變化。目前(從 8.5 開始)沒有強制創建空文件的方法。

強制日誌輪換通常也使用 logrotate 完成。例如,類似 rhel 的發行版在 /etc/logrotate.d/ 中有日誌輪換配置。

例如:/etc/logrotate.d/syslog 包含 rsyslogd 文件的規則。在這種情況下,我可以使用以下命令強制日誌輪換:

logrotate -f /etc/logrotate.d/syslog

引用自:https://unix.stackexchange.com/questions/157747