cronで起動したスクリプトの出力ログの文字化けとその対処
結論から書くとターミナルの環境変数の引継ぎがされないため。
使用中のCent OSで、rsyncを用いたバックアップスクリプトを定時に動作させている。このときにどの様なファイルが転送/削除せられたかを把握するために、ログを出力する様にしていた(単純にrsyncコマンドに-vオプションを付加しただけであるが)。
しかし、出力されたログを見ると、ものの見事に文字化けが発生しており、これでは全くログの意味をなさない状態であった。
スクリプト自体の文字コードがShift JISであったため、それが原因かと疑って、OS既定の文字コードに保存し直すも、結局文字化けが再発した。
この原因は至極単純なことであって、環境変数の引継ぎがないためである。ログインしたシェルでは通常文字コードは次の様に表示される。
$ echo $LANG
ja_JP.UTF-8
しかしながら、cronで起動された場合、この環境変数LANGが設定されない状態であるため文字化けが発生する様である。