以下とまったく同じ事象が発生していたので、原因と解決法のメモ。
ローテートされた後のログファイルの先頭が \0 で埋められて困ったことになりました。
logrotate で copytruncate 使うなら要 O_APPEND (つまりは >>) - asari3の日記
シェルから Java プログラムを実行するのに
java $JAVA_OPTIONS in.tmd45.java.Class $PROP > $HOME/log/ClassLog.log
みたいなことをしていて、
Java の出力を疑っていたのでここまでたどり着くのに時間がかかりましたorz
O_APPENDになる»によるリダイレクトが大事。これが>だとファイルポジションが先頭に戻らないため、truncateしたところまでNUL文字で埋まったファイルが出来上がる。
Nabium - 技術メモ centos5 tomcat7#ログのローテーション
「>」を使っていましたので
java $JAVA_OPTIONS in.tmd45.java.Class $PROP >> $HOME/log/ClassLog.log
「>>」しましょう、ってことですね。
当方の事象ではログのローテーションにlogrotate
(Linux系)ではなくlogadm
(Solaris系)が使用されていましたが、オプションで(logadmに)「-c」が指定されていて
これが logrotate の copytruncate に相当するのかなー、と想像してます*1。
('ω`)
*1:正解を教えてエロい人!