Cronで文字化けの原因と解決方法

直でCommandを打って実行する時は文字化けしないのに、Cronで実行するとなぜか文字化けすることがありますよね。
逆にCronで実行する時は文字化けしないのに、直でCommandを打って実行するとなぜか文字化けすることがあります。
今回はCronで文字化けする原因とその対策を書いてみます。

原因

環境変数LANGの設定がズレているから。

解説

ユーザーの環境変数Cronの環境変数は別物です。
つまり、ユーザーの環境変数のLANGとCronの環境変数のLANGの指定が異なっている可能性があります。
例えば、AWSのAmazon Linux2 AMIのインスタンスではec2-userの環境変数のLANGはen_US.UTF-8に指定されていますが、Cronでは指定されていません。
このLANGのズレにより、両方の実行結果が生じるわけです。

対策

Cronのタスク実行前に環境変数のLANGを指定してあげます。
例えば、AWSのAmazon Linux2 AMIだとcrontab -eなどでcron編集画面で下記のようにします。

LANG=en_US.UTF-8;
0 0 * * * ~/foo.sh
0 0 * * * ~/bar.sh

もし、特定のタスクのみ適用したい場合は下記のようにします。

0 0 * * * export LANG=en_US.UTF-8; ~/foo.sh
0 0 * * * ~/bar.sh

Linux

Posted by YongJin Kim