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
。