staging.inyokaproject.org

Unterschiedlicher Zeichensatz?

Status: Ungelöst | Ubuntu-Version: Ubuntu 12.04 (Precise Pangolin)
Antworten |

Spoiler

Anmeldungsdatum:
6. August 2008

Beiträge: Zähle...

Servus,

ich habe ein PHP-Script, was einmal pro Woche per Cron aufgerufen wird. Innerhalb des Scripts steht folgende Zeile:

shell_exec('echo "Hallo, anbei die gewünschten Dateien." | mutt -s "Überlauf-Auswertung" ...

Wenn ich das Script von der Shell aus per Hand starte, werden die Sonderzeichen korrekt übermittelt und sehen dann in der ankommenden Mail auch sauber aus. Wenn ich das Ding aber per Cron starte, verhunzt er mit die Sonderzeichen ... Cron hat also offenbar einen anderen Zeichensatz aktiv.

Warum eigentlich und wie stelle ich für Cron den gleichen Zeichensatz ein wie die Shell ihn benutzt?

Danke im Voraus.

seahawk1986

Anmeldungsdatum:
27. Oktober 2006

Beiträge: 10978

Soweit ich das in Erinnerung habe laufen alle von Upstart gestarteten Dienste mit LANG=POSIX - du könntest das für den Shell-Befehl ändern, indem du die Umgebungsvariable LANG so setzt wie in deiner Shell (mit "locale" kannst du dir die Einstellungen ausgeben lassen):

shell_exec('LANG=de_DE.utf-8; export LANG; echo "Hallo, anbei die gewünschten Dateien." | mutt -s "Überlauf-Auswertung" ...

Alternativ könnte man natürlich auch auf nicht-ASCII-Zeichen verzichten.

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 12527

Spoiler schrieb:

Wenn ich das Script von der Shell aus per Hand starte, werden die Sonderzeichen korrekt übermittelt und sehen dann in der ankommenden Mail auch sauber aus. Wenn ich das Ding aber per Cron starte, verhunzt er mit die Sonderzeichen ... Cron hat also offenbar einen anderen Zeichensatz aktiv.

Warum eigentlich und wie stelle ich für Cron den gleichen Zeichensatz ein wie die Shell ihn benutzt?

Cronjobs laufen halt mit einer anderen Umgebung und oft auch mit einem anderen Benutzer (typischerweise "root"). Dessen Umgebung wird anders definiert als die in Deinem interaktiven Terminal.

Du kannst für Cron-Jobs eine Umgebungsvariable auf die gewünschte Sprache setzten (siehe Cron). Oder Du machst das in Deinem PHP-Skript. Typischerweise setzt man "LANG=de_DE.UTF-8" für Deutsch. In beiden Fällen wirkt die Einstellung auf Dein gesamtes Skript. Wenn Du das nur für den einzelnen Aufruf machen willst, kannst Du das auch so machen:

1
shell_exec('export LANG=de_DE.UTF-8; echo "Hallo, anbei die gewünschten Dateien." | mutt -s "Überlauf-Auswertung" ...'

Wenn Du erst mal herausfinden möchtest, was unter Cron wirkt, kannst Du einen Job einrichten, der diesen Befehl ausführt:

1
/usr/bin/locale >/tmp/locale.txt

Hinterher findest Du dann in /tmp/locale.txt die Informationen.

Antworten |