CRON ändert die Codierung?

8

Ich habe ein altes Java-Programm, das ein SQL-Skript ausgibt. Ich verwende dann Apache Derby, um diese SQL auf der Zieldatenbank auszuführen (die sich nicht auf demselben Server wie CRON befindet).

Wenn es über Kitt ausgeführt wird, funktioniert dies einwandfrei. Unter Windows funktioniert dies einwandfrei. Wenn Derby mit CRON ausgeführt wird, liest es £ -Zeichen als ?.

Wenn ich mir das (mit VI) generierte SQL-Skript anschaue, enthält es die £ -Zeichen. Wenn ich die Datenbank jedoch überprüfe, enthält sie ?.

Warum sollte sich das Programm unter CRON anders verhalten?

Codemwnci
quelle

Antworten:

6

Es scheint, dass CRON das Problem war. Wenn das Java-Programm ausgeführt und die Ergebnisse in eine Datei ausgegeben wurde, konnte es nicht richtig schreiben. Die SQL-Datei, die ich las, zeigte auf eine falsche Version.

Um das Problem zu lösen, habe ich den folgenden Code oben im CRON-Skript hinzugefügt

export LANG = en_US.UTF-8

Dies stellte sicher, dass das £ -Zeichen korrekt formatiert war.

Codemwnci
quelle
Sie können auch Ihre eigenen Antworten akzeptieren (klicken Sie auf das Häkchen im Kreis links von Ihrer Antwort). :)
Htorque
3

Für mich haben die genannten Lösungen nicht funktioniert. Eine andere Lösung, die ich las, war zu setzen

"LANG = en_US.UTF-8" in der Datei "/ etc / environment".

Funktionierte aber auch nicht.

Was für mich funktionierte, war das Öffnen der Crontab-Datei mit

crontab -e

und am Anfang setzen:

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

Womit auch die Umgebungsvariable gesetzt wird.

Dies muss mit jedem Benutzer erfolgen, den Sie diese Variablen ausführen möchten. Führen Sie für root "sudo -s" aus, bevor Sie crontab eingeben.

snickers2k
quelle