Bash-Skript (Cronjob): Programm öffnen hat falsche Sprache
Which ENV must be exported that a bash cronjob script opens the program in the correct language?
If I open the bash script so manually in the command-line the program is opened in the correct language.
However, if the program is opened via the cronjob, the program runs via the wrong language?
The LANG ENV can not be I checked that is also in the Crontab on the same language.
thanks in advance.
Solution 1:
TL;DR You need to set LC_ALL
or LC_MESSAGES
. For example:
LC_ALL=en_US.utf8
The list of all supported locales from your machine can be obtained with: locale -a
and locale -av
for more details.
Details
From crontab(5)
man page (man -S5 crontab
):
An active line in a crontab is either an environment setting or a cron command. An environment setting is of the form:
name = value
By default, cron sends a mail using the
Content-Type:
header oftext/plain
with thecharset=
parameter set to thecharmap/codeset
of the locale in which crond(8) is started up, i.e., either the default system locale, if noLC_*
environment variables are set, or the locale specified by theLC_*
environment variables (seelocale(7)
). Different character encodings can be used for mailing cron job outputs by setting theCONTENT_TYPE
andCONTENT_TRANSFER_ENCODING
variables in a crontab to the correct values of the mail headers of those names.
From locale(7)
man page (man -S7 locale
):
LC_MESSAGES
This category affects the language in which messages are displayed and what an affirmative or negative answer looks like. The GNU C library contains thegettext(3)
,ngettext(3)
, andrpmatch(3)
functions to ease the use of this information. The GNU gettext family of functions also obey the environment variableLANGUAGE
(containing a colon-separated list of locales) if the category is set to a valid locale other thanC
. This category also affects the behavior ofcatopen(3)
.
LC_ALL
All of the above.
To troubleshoot the environment of a process, you can display it with the following command. Replace <PID>
with the process id of your cron job that is still running. You will need to test with a cronjob that takes a few minutes at least (e.g. sleep 300
).
ps e -wwp <PID>