新しく作成してもらったサーバ上からflumeを使って別サーバにログファイルを転送した時に日本語が文字化けする現象がありまして。なんだろう?と思ってflumeを管理してる別チームから「LANGの設定がUTF-8ではないとおもいますよ」と教えてもらいました。
でも、envとかすると"LANG=ja_JP.UTF-8"とでてくるし、うーんと思ってて、flumeを立ち上げた時にscriptコマンドでログをとってたので見返してたら、もしかしてservice は環境変数が引き継がれないのは知ってるけどLANGもか??となんとなく思ってググってたら、デーモンの起動・終了にはserviceコマンドを利用しよう - インフラエンジニアway - Powered by HEARTBEATS に答えが載ってました。引用すると、
なんといっても一番最後のがポイントですね
上のブログでもやってましたが。こちらでも。
[root@CentOS ~]# cat /etc/init.d/echo-env #!/bin/sh # chkconfig: - 64 36 env [vagrant@CentOS init.d]$ env | grep LANG LANG=ja_JP.UTF-8 [vagrant@CentOS init.d]$ sudo /etc/init.d/echo-env | grep LANG LANG=ja_JP.UTF-8 [vagrant@CentOS init.d]$ sudo service echo-env | grep LANG [vagrant@CentOS init.d]$
確かに。
じゃぁ、どう対応するの?というと、他の/etc/init.d内にあるファイルを読むと見えてきます
- /etc/sysconfig/i18n にある設定を変更して、起動スクリプト内から /etc/init.d/functions を読みこませる
- /etc/sysconfig/ に設定ファイルを書いてそれを読みこませる
i18nを変更すると全体的な影響があるのでそこを考慮できてれば、そちらを変更するほうが他のサービスまで変更できるのでいいのですが、そこが考慮できてない時は後者のほうがよいかと思います。(そして考慮できてないことがほとんど)
/etc/init.d/functions にはdaemonやkillproc関数があるので、サービス作るときは両方読みこませたほうがいいですね。
そしてちゃんと環境変数の確認もしなきゃなぁ。ちなみに今回はサーバに作成してもらった人はVisualVMで確認してました。うーむ便利だ。