====== syslog-ngで出力したログをlogrotateでやらかしたときの対処 ======
syslog-ngで年月日をつけてログ出力しているのにlogroateでローテートされたとき、オリジナルのファイル名にローテートした年月日がついて、同名の空ファイルが作成される。
# ll
-rw-r----- 1 root adm 521 10月 26 03:18 2014 access.apache.20141026.log-20141102
-rw-r----- 1 root adm 0 11月 2 03:30 2014 access.apbeta.20141026.log
まずは、ファイルサイズ0のファイル(空ファイル)を一括削除する。
# find ./ -size 0 -exec rm {} \;
# ll
-rw-r----- 1 root adm 521 10月 26 03:18 2014 access.apache.20141026.log-20141102
続いて、ファイル名のログローテートされた年月日部分を削除する(.log-yyyymmddを.logに置換する)。
# for file in *.log-2014*; { mv "$file" "${file%%.log-2014*}.log"; }
# ll
-rw-r----- 1 root adm 521 10月 26 03:18 2014 access.apache.20141026.log
ローテートの設定ファイルを編集(削除やコメントアウト)する。
# vi /etc/logrotate.d/httpd