読者です 読者をやめる 読者になる 読者になる

TMD45INC!!!

tmd45++; // Deprecated

ログファイルの先頭に大量のnul文字が

NUL文字 logrotate logadm copytruncate

以下とまったく同じ事象が発生していたので、原因と解決法のメモ。

ローテートされた後のログファイルの先頭が \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:正解を教えてエロい人!

ページトップへ移動