- - PR -
cron に実行させると日本語が ? になる
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 2005-06-22 23:33
OS:RedHat Linux 9
jdk:j2sdk1.4.2_08 log4j:1.2.8 ある java プログラムがあります(Hoge とします)。 それはログ出力に commons-logging を利用しています。 実装(?)は log4j で、アペンダーに RollingFileAppender を使用しています。 そのプログラムを起動するシェルを作成しました(a.sh とします)。 --- a.sh #!/bin/bash cd /home/hoge CP=. for file in lib/*.jar do CP=$CP:$file done $JAVA_HOME/bin/java -classpath $CP Hoge --- ここまで このシェルを普通に起動すると日本語のログが出力されます。 $ ./a.sh ところがこれを cron に登録すると日本語が全て ? で出力されてしまいます。 0,10,20,30,40,50 * * * * /home/hoge/a.sh > /dev/null 2 >&1 文字コードは EUC-JP です。 さっぱり何が原因か分かりません。 ただ、文字化けの感じが Java 固有のような気がしたので この会議室に投稿しました。 ログなので何が問題という訳でもないのですが。。。 何かお分かりになる方がいらっしゃいましたら、ご教授願います。 | ||||
|
投稿日時: 2005-06-22 23:54
単純にcron経由とそうじゃないときの
環境変数の違いによるものだと思ったりしますが。 実行しようとしてるシェルスクリプトにて、setコマンドで環境変数を 書き出す処理でも加えて、cronを経由したときとそうじゃないときの 環境変数の違いを見比べてみてください。 あと、Javaの問題だと言ってるにもかかわらず、Hogeの内容を全く書かないのは ちょっと乱暴じゃないかと思ったりしました。 | ||||
|
投稿日時: 2005-06-23 00:01
gottsuさん、こんにちは。
Java固有の問題ではないと思いますよ。 私の csh/Solarisの場合は、スクリプトの冒頭で setenv LANG ja としています。 bash/RedHatの場合は LANG=ja_JP.EUC とかやるのではないでしょうか? | ||||
|
投稿日時: 2005-06-23 00:18
それだとその後に続くコマンドのみにしかLANG変数の変更が効かないですから、 cshのsetenvと同様に処理する必要があり、bashなら export LANG=ja_JP.EUC-JP とかになります。 | ||||
|
投稿日時: 2005-06-23 09:03
そうでした、Mattunさんありがとう。
| ||||
|
投稿日時: 2005-06-23 11:19
Mattun さん、Kissinger さん、回答ありがとうございます。
お二人のご指摘どおり環境変数の違いによるものでした。 文字化けしないユーザーの LANG を見たら LANG=ja_JP.eucJP となっていたのでそれを a.sh にも記述したところ 文字化けしなくなりました。 ---追加 export LANG=ja_JP.eucJP --- 大変勉強になりました。 ありがとうございました。
大変失礼致しました。 確かに書いていることが支離滅裂でした。 以後気を付けたいと思います。 今後とも宜しくお願い致します。 |
1