SSブログ

Debian 10のlogrotateの不具合 [Debian]

[ソフトウェアのバージョン]
logrotate 3.14.0-4
systemd 241-7~deb10u4
clamdscan 0.102.2+dfsg-0+deb10u1

1. 発生事象


clamd のログファイルの切替が有効とならないことがある。

・該当するファイルは、/var/log/clamav/clamav.log である。
・logrotate でのファイルのローテーションは実行されている。
 (cf. /var/lib/logrotate/status)
・clamd でのログの出力先が切り替っていない。
 ログファイル内のログのタイムスタンプから判断できる。
・Debian 9 (logrotate 3.11.0-0.1) では発生しない。


2. 原因


ブート直後に logrotate が実行されることがあるためである。

(1) logrotate.timer により、ブート直後に logrotate が実行されることがある。


・00:00 に logrotate.timer を実行できない場合、次のブート時に発生する。
・logrotate.timer の設定に依存する。
 ([Timer] 欄の 'Persistent=true' により発生する。)


(2) ブート直後には、当該サービスは下記のような状態と思われる。


・常駐プロセスが起動されており、既にログファイルをオープンしている。
 (常駐プロセスがログファイルを掴んでいる。)
・サービスとしては起動の途中であり、まだ inactive 状態である。


(3) 当該サービスについて、logrotate は下記のような処理を実施する。


・設定されている条件に従い、ログファイルをローテーションする。
・サービスが active 状態の場合、SIGHUP の送信を行う。
 (cf. /etc/logrotate.d/clamav-daemon)


(4) 上記の場合、常駐プロセスでのログファイルの再オープンは実施されない。


・常駐プロセスでの SIGHUP の受信がないためである。
・このため、古いログファイルへの出力が継続される。

(補足)
・当該サービスは clamav-daemon、常駐プロセスは clamd である
・ブート直後以外での logrotate の実行では、問題は発生しない。
 (当該サービスが active 状態のため。)
・Debian 9 では、logrotate.timer は存在しない。
 (anacron は、cron から実行される。)


3. 対処方法


下記の手順により、ブート直後の logrotate の実行を回避する。

(1) /lib/systemd/system/logrotate.timer を変更する場合


(a) /lib/systemd/system/logrotate.timer の編集

# diff logrotate.timer logrotate.timer.org
6d5
< OnBootSec=5min
8a8
> Persistent=true


・[Timer] 欄の 'Persistent=true' の削除
 ブート直後に logrotate が実行されないようにする。

・[Timer] 欄への 'OnBootSec=5min' の追加
 ブートの 5分後に logrotate を実行する。
 (サービスが active なるまでの待ち時間を設けている。)

・anacron の delay に該当する設定項目はない。


(b) 変更内容の反映

# systemctl daemon-reload


(2) /etc/systemd/system/logrotate.timer を作成する場合


(a) /etc/systemd/system/logrotate.timer の作成


/lib/systemd/system/logrotate.timer をコピーする。


(b) /etc/systemd/system/logrotate.timer の編集


/lib/systemd/system/logrotate.timer の場合と同じ。


(c) 変更内容の反映

# systemctl daemon-reload
# systemctl enable logrotate.timer


(補足)
/etc/systemd/system/timers.target.wants/logrotate.timer が存在する。
ファイルの内容は、下記のいずれかである。
・/lib/systemd/system/logrotate.timer へのリンク
・/etc/systemd/system/logrotate.timer へのリンク


[備考]


nice!(0)  コメント(0) 
共通テーマ:パソコン・インターネット