logrotateでファイルに書き込まれない時にした対処

Linux

CentOSのlogrotateでログファイルのサイズが0バイトでローテーションされてしまった時の応急処置をまとめました。根本解決ではないですが、下記の通り対処したところ問題解消できたので手順を一例として示します。

スポンサーリンク

環境

・CentOS7.4
・logrotate 3.8.6
  ⇒cron.dailyにlogrotateを登録し、毎日自動実行。(デフォルト設定)
・rsyslogd 8.24.0

現象

logrotateコマンドによって各ログファイルがローテーションされる際にログがまったく書き込まれないことがある。

ログが書き込まれなかった日のファイルサイズが0Bで、当然中身も何も無い状態。ログが書き込まれる日もある。書き込まれていない日の分が後日まとめて書き込まれるというわけでもなく、下記の例で1つ挙げると12/9分のログが消失している。遡って確認したが曜日によっての規則性も無く、書き込めている日との違いが判断付かない。

# ls -lth /var/log/maillog*
<<以下、抜粋>>
-rw------- 1 root root    0 12月  9 04:02 /var/log/maillog.3
-rw------- 1 root root    0 12月  8 04:02 /var/log/maillog.5
-rw------- 1 root root  14M 12月  8 04:01 /var/log/maillog.6
-rw------- 1 root root    0 12月  7 04:02 /var/log/maillog.7
-rw------- 1 root root    0 12月  6 04:02 /var/log/maillog.9
-rw------- 1 root root    0 12月  5 04:02 /var/log/maillog.11
-rw------- 1 root root    0 12月  4 04:02 /var/log/maillog.13
-rw------- 1 root root  14M 12月  3 04:02 /var/log/maillog.15
-rw------- 1 root root    0 12月  2 04:02 /var/log/maillog.17
-rw------- 1 root root    0 12月  1 04:02 /var/log/maillog.19

messagesログも同じ状況なので、ログが残らなかった日の手掛かりも掴めない。

# ls -lth /var/log/messages*
<<以下、抜粋>>
-rw------- 1 root root    0 12月  9 04:02 /var/log/messages.3
-rw------- 1 root root  351 12月  8 04:02 /var/log/messages.5
-rw------- 1 root root  70K 12月  8 04:02 /var/log/messages.6
-rw------- 1 root root    0 12月  7 04:02 /var/log/messages.7
-rw------- 1 root root    0 12月  6 04:02 /var/log/messages.9
-rw------- 1 root root    0 12月  5 04:02 /var/log/messages.11
-rw------- 1 root root    0 12月  4 04:02 /var/log/messages.13
-rw------- 1 root root  76M 12月  3 04:02 /var/log/messages.15
-rw------- 1 root root    0 12月  2 04:02 /var/log/messages.17
-rw------- 1 root root    0 12月  1 04:02 /var/log/messages.19

切り分け(と解決まで至らなかった対応内容)

解決に至るまでに試した過程なので読み飛ばして良い箇所ですが、エジソンの名言にもある通り、うまくいかなかった方法も参考までに書き残しておきます。

・logrotateコマンドの手動実行

# logrotate -f /etc/logrotate.conf
cron.dailyでlogrotateを実行(自動実行)すると現象が出ている事から、logrotateコマンドを手動で実行したところ、正常にローテーションされることを確認できた。オプション -f は強制実行。

・imjournal.stateファイルの削除

上記ファイルを削除すると良いという情報がいくつかあったので、/var/lib/rsyslog/imjournal.state を削除ではなく、別のディレクトリへ移動してrsyslogサービスを再起動したが、imjournal.stateが3分程度で自動生成されて、現象も改善できなかった。

・logrotateファイル圧縮オプションの指定

vi /etc/logrotate.conf
#compress → compress へ変更(コメントアウトを解除)
ログファイルディレクトリ計8GB超のサイズが気になったので、一旦古いファイルを削除して計6GB程度までに整理した上で、gzipオプションを有効にしてみたが改善なし。ログが残らない場合に非圧縮でファイルサイズ0Bだったものが、圧縮処理が入ったためか20Bになった。

・バックアップソフトによるジョブ実行時刻の変更

cron実行時刻とバックアップジョブの実行時刻が近かったので、サーバー負荷が上がってファイル書き込みに影響を及ぼしているのではないかと考え、バックアップジョブ実行時刻をずらしてみたが改善なし。

原因

不明。同様の現象に遭遇し、原因が判明した方がいらっしゃいましたらコメントをいただけると嬉しいです。

対処(解決できた対応内容)

cron.dailyとは別にcrontabでlogrotateを設定したところ、正常にログが書き込まれるようになった。

cron.dailyは変更しなかったので下記の例でいうところ毎日3:30と4:02の2度ローテーションされるものと予想したが、結果は毎日3:30に1度ローテーションされるようになった。

# vi /etc/crontab
# cat /etc/crontab
<<以下、抜粋>>
02 4 * * * root run-parts /etc/cron.daily      ⇒変更なし
30 3 * * * root logrotate -f /etc/logrotate.conf  ⇒追記

結果

ログが正常にローテーションされるようになった。(切り分けでファイル圧縮オプションを有効にしましたが、その後もこのまま運用しています)

# ls -lth /var/log/maillog*
-rw------- 1 root root 591K  1月 30 09:17 /var/log/maillog
-rw------- 1 root root 557K  1月 30 03:29 /var/log/maillog.1.gz
-rw------- 1 root root 675K  1月 29 03:29 /var/log/maillog.2.gz
-rw------- 1 root root 1.1M  1月 28 03:30 /var/log/maillog.3.gz
-rw------- 1 root root 1.1M  1月 27 03:30 /var/log/maillog.4.gz
-rw------- 1 root root 734K  1月 26 03:30 /var/log/maillog.5.gz
<<後略>>

コメント