J'ai un programme Java hérité qui génère un script SQL. J'utilise ensuite Apache Derby pour exécuter ce code SQL sur la base de données cible (qui ne se trouve pas sur le même serveur que CRON).
Lorsqu'il fonctionne via PuTTY, cela fonctionne bien. Lorsqu'il est exécuté dans Windows, cela fonctionne bien. Lorsqu'il est exécuté avec CRON, Derby lit les signes £ sous la forme??.
Si je regarde le script SQL généré (avec VI), il contient les signes £. Si je vérifie cependant la base de données, elle contient?.
Pourquoi exécuter cela sous CRON rendrait le programme se comporter différemment?
Il semble que CRON était le problème. Lorsque le programme Java a été exécuté et que les résultats ont été exportés dans le fichier, l'écriture a échoué. Le fichier SQL que je lisais désignait une mauvaise version.
Pour résoudre le problème, j'ai ajouté le code suivant en haut du script CRON
export LANG = en_US.UTF-8
Cela garantissait que le signe £ était correctement formaté.
pour moi, les solutions mentionnées ne fonctionnaient pas. une autre solution que je lisais était de définir
"LANG = en_US.UTF-8" dans le fichier "/ etc/environment".
Mais ne travaillait pas non plus.
Ce qui a fonctionné pour moi a été d'ouvrir le fichier crontab avec
crontab -e
et mis au début:
LANG=de_DE.UTF-8
LANGUAGE=de
LC_CTYPE=de_DE.UTF-8
PYTHONIOENCODING=utf8
Ce qui définit également la variable d'environnement.
Cela doit être fait avec chaque utilisateur avec lequel vous voulez exécuter ces variables. Pour la racine, lancez "Sudo -s" avant d’entrer dans crontab.