Locale al cron

Us ha passat mai que disposeu d’una comanda de terminal funcional i que, quan aquesta mateixa l’agregueu al cron, no? Normalment per a temes relacionats amb la codificació de fitxers. El tema està en el locale.

Locale com a usuari apareix això:

LANG=es_ES.utf8
LC_CTYPE="es_ES.utf8"
LC_NUMERIC="es_ES.utf8"
LC_TIME="es_ES.utf8"
LC_COLLATE="es_ES.utf8"
LC_MONETARY="es_ES.utf8"
LC_MESSAGES="es_ES.utf8"
LC_PAPER="es_ES.utf8"
LC_NAME="es_ES.utf8"
LC_ADDRESS="es_ES.utf8"
LC_TELEPHONE="es_ES.utf8"
LC_MEASUREMENT="es_ES.utf8"
LC_IDENTIFICATION="es_ES.utf8"
LC_ALL=es_ES.utf8
En canvi, executat des del cron:
LANG=
LC_CTYPE="POSIX"
LC_NUMERIC="POSIX"
LC_TIME="POSIX"
LC_COLLATE="POSIX"
LC_MONETARY="POSIX"
LC_MESSAGES="POSIX"
LC_PAPER="POSIX"
LC_NAME="POSIX"
LC_ADDRESS="POSIX"
LC_TELEPHONE="POSIX"
LC_MEASUREMENT="POSIX"
LC_IDENTIFICATION="POSIX"
LC_ALL=

La solució consisteix en executar la comanda amb els paràmetres següents dins el cron:

0   3   *   *   6   root   su - root -c comanda_la_que_sigui.sh

Aquí hi ha la clau: The optional argument – may be used to provide an environment similar to what the user would expect had the user logged in directly.

An argument of -c will cause the next argument to be treated as a command by most command interpreters.

Gerard

Gerard Farràs i Ballabriga.