web-dev-qa-db-ja.com

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のロギングは停止します。

問題があれば、私のシステムはrsyslog-5.8.6を実行しているXubuntu 12.04です。

前もって感謝します。

問題が発生するのは、ファイルシステム上で移動した後もアプリケーションがファイル記述子を開いたままにしているためです。移動後に直接ロギングを再開するようにプログラムに指示できない限り(通常、デーモンには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

2
gertvdijk