- PR -

cron に実行させると日本語が ? になる

1
投稿者投稿内容
gottsu
会議室デビュー日: 2003/03/06
投稿数: 2
投稿日時: 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 固有のような気がしたので
この会議室に投稿しました。

ログなので何が問題という訳でもないのですが。。。

何かお分かりになる方がいらっしゃいましたら、ご教授願います。
Mattun
ぬし
会議室デビュー日: 2004/08/10
投稿数: 1391
投稿日時: 2005-06-22 23:54
単純にcron経由とそうじゃないときの
環境変数の違いによるものだと思ったりしますが。

実行しようとしてるシェルスクリプトにて、setコマンドで環境変数を
書き出す処理でも加えて、cronを経由したときとそうじゃないときの
環境変数の違いを見比べてみてください。

あと、Javaの問題だと言ってるにもかかわらず、Hogeの内容を全く書かないのは
ちょっと乱暴じゃないかと思ったりしました。
Kissinger
ぬし
会議室デビュー日: 2002/04/30
投稿数: 428
お住まい・勤務地: 愛知県
投稿日時: 2005-06-23 00:01
gottsuさん、こんにちは。

Java固有の問題ではないと思いますよ。
私の csh/Solarisの場合は、スクリプトの冒頭で
setenv LANG ja
としています。

bash/RedHatの場合は
LANG=ja_JP.EUC
とかやるのではないでしょうか?
Mattun
ぬし
会議室デビュー日: 2004/08/10
投稿数: 1391
投稿日時: 2005-06-23 00:18
引用:

bash/RedHatの場合は
LANG=ja_JP.EUC
とかやるのではないでしょうか?



それだとその後に続くコマンドのみにしかLANG変数の変更が効かないですから、
cshのsetenvと同様に処理する必要があり、bashなら
export LANG=ja_JP.EUC-JP
とかになります。
Kissinger
ぬし
会議室デビュー日: 2002/04/30
投稿数: 428
お住まい・勤務地: 愛知県
投稿日時: 2005-06-23 09:03
そうでした、Mattunさんありがとう。
gottsu
会議室デビュー日: 2003/03/06
投稿数: 2
投稿日時: 2005-06-23 11:19
Mattun さん、Kissinger さん、回答ありがとうございます。
お二人のご指摘どおり環境変数の違いによるものでした。

文字化けしないユーザーの LANG を見たら
LANG=ja_JP.eucJP
となっていたのでそれを a.sh にも記述したところ
文字化けしなくなりました。

---追加
export LANG=ja_JP.eucJP
---

大変勉強になりました。
ありがとうございました。

引用:

あと、Javaの問題だと言ってるにもかかわらず、Hogeの内容を全く書かないのは
ちょっと乱暴じゃないかと思ったりしました。


大変失礼致しました。
確かに書いていることが支離滅裂でした。
以後気を付けたいと思います。

今後とも宜しくお願い致します。
1

スキルアップ/キャリアアップ(JOB@IT)