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