てきとうなメモ

本の感想とか技術メモとか

CentOS6のcronのLANG環境変数

cron上で実行しているスクリプトのLANG環境変数がen_USになることがあった。

/etc/init.d/cron→/etc/init.d/functions→/etc/profile.d/lang.shと呼び出していて

    if [ -n "$LANG" ]; then
      case $LANG in
        *.utf8*|*.UTF-8*)
        if [ "$TERM" = "linux" ]; then
            if [ "$consoletype" = "vt" ]; then
                case $LANG in
                        ja*) LANG=en_US.UTF-8 ;;
                        ko*) LANG=en_US.UTF-8 ;;
                        si*) LANG=en_US.UTF-8 ;;
                        zh*) LANG=en_US.UTF-8 ;;
                        ar*) LANG=en_US.UTF-8 ;;
                        fa*) LANG=en_US.UTF-8 ;;
                        he*) LANG=en_US.UTF-8 ;;
                        en_IN*) ;;
                        *_IN*) LANG=en_US.UTF-8 ;;
                esac
            fi
        fi
        ;;
        *)
        if [ "$TERM" = "linux" ]; then
            if [ "$consoletype" = "vt" ]; then
                case $LANG in
                        ja*) LANG=en_US ;;
                        ko*) LANG=en_US ;;
                        si*) LANG=en_US ;;
                        zh*) LANG=en_US ;;
                        ar*) LANG=en_US ;;
                        fa*) LANG=en_US ;;
                        he*) LANG=en_US ;;
                        en_IN*) ;;
                        *_IN*) LANG=en_US ;;
                esac
            fi
        fi
        ;;
      esac
    fi

となっていて、UTF-8系だとen_US.UTF-8に、UTF-8系以外だと、en_USに上書きされてしまうっぽい。

ただし、$TERMと$consoletypeを見ているので、

$ service crond restart

とかすると環境変数を引き継いでくれるみたいだけども。