web-dev-qa-db-ja.com

CRONはエンコーディングを変更していますか?

SQLスクリプトを出力するレガシーJavaプログラムがあります。次に、Apache Derbyを使用して、ターゲットデータベース(CRONと同じサーバー上にない)でそのSQLを実行します。

PuTTY経由で実行すると、これは正常に機能します。 Windowsで実行すると、これは正常に機能します。 CRONを使用して実行すると、Derbyは£記号を?として読み取ります。

(VIを使用して)生成されたSQLスクリプトを見ると、£記号が含まれています。ただし、データベースを確認すると、?が含まれています。

これをCRONで実行すると、プログラムの動作が異なるのはなぜですか?

7
Codemwnci

CRONが問題だったようです。 Javaプログラムを実行し、結果をファイルに出力すると、正しく書き込めませんでした。私が読んでいたSQLファイルは、間違ったバージョンを指していました。

この問題を解決するために、CRONスクリプトの上部近くに次のコードを追加しました

export LANG = en_US.UTF-8

これにより、£記号が正しくフォーマットされていることが保証されました。

6
Codemwnci

私にとって、言及された解決策は機能していませんでした。私が読んだ別の解決策は、設定することでした

「/ etc/environment」ファイルの「LANG = en_US.UTF-8」。

しかし、どちらも機能していませんでした。

私のために働いていたのは、crontabファイルを開くことでした

crontab -e

そして最初に設定します:

LANG=de_DE.UTF-8
LANGUAGE=de
LC_CTYPE=de_DE.UTF-8
PYTHONIOENCODING=utf8

環境変数も設定します。

これは、これらの変数を実行するすべてのユーザーで実行する必要があります。 rootの場合、crontabに入る前に「Sudo -s」を実行します。

1
snickers2k