テクデップ(Techdep)

コンピュータ、プログラミング、DTP(InDesign)に関する備忘録

cronで起動したスクリプトの出力ログの文字化けとその対処

結論から書くとターミナルの環境変数の引継ぎがされないため。

使用中のCent OSで、rsyncを用いたバックアップスクリプトを定時に動作させている。このときにどの様なファイルが転送/削除せられたかを把握するために、ログを出力する様にしていた(単純にrsyncコマンドに-vオプションを付加しただけであるが)。

しかし、出力されたログを見ると、ものの見事に文字化けが発生しており、これでは全くログの意味をなさない状態であった。

スクリプト自体の文字コードがShift JISであったため、それが原因かと疑って、OS既定の文字コードに保存し直すも、結局文字化けが再発した。

この原因は至極単純なことであって、環境変数の引継ぎがないためである。ログインしたシェルでは通常文字コードは次の様に表示される。

$ echo $LANG
ja_JP.UTF-8

しかしながら、cronで起動された場合、この環境変数LANGが設定されない状態であるため文字化けが発生する様である。

回避策

この現象を回避するためには、スクリプト冒頭に、

export LANG=ja_JP.UTF-8
と記述しておけばよい。

文字コードの類は嵌ると本当に地獄である……。