[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: crontab -e



El Sun, 16 Jan 2011 12:23:17 -0600, rantis cares escribió:

> El día 13 de enero de 2011 06:24, Camaleón escribió:

(...)

>>>> gnokii --getsms IN 1
>>>
>>> No me sale ningun error, de hecho antes de comenzar a hacer el script,
>>> lo utilizaba asi. Despues use solo el script y lo ejecutaba cuando lo
>>> necesitaba. Solo despues hice que cron lo ejecutara y ahi es donde "la
>>> puerca torcio el rabo".
>>
>> Haz una pruebas más. Ejecuta el script desde la línea de comandos pero
>> forzando un cambio de locale:
>>
>> LANG=POSIX; sh tuscript.sh
>>
>> ¿Te aparece el error?
> 
> Si, el error me sigue apareciendo...

¿Ah, síiii? >:-DDD 

(no lo tomes a mal, no es que me alegre del error, es que es "bueno" que 
hayas podido reproducirlo fuera de cron porque eso querría decir que al 
script *sí* le afecta la configuración del "locale" con el que se 
ejecuta).
 
> GNOKII Version 0.6.26
> iconv: Invalid or incomplete multibyte or wide character 
> iconv: Invalid or incomplete multibyte or wide character

Recapitulemos, no vaya a ser que me haya alegrado sin motivo.

Has ejecutado directamente desde la línea de comandos (_no_ desde cron) 
"LANG=POSIX; sh tuscript.sh" y te aparece el mensaje de error ¿sí? :-)

Vale, pues ahora haz lo mismo pero con el "locale" que debe tener:

LANG=es_ES.UTF-8; sh tuscript.sh

¿Sigue saliendo el error?
 
>> Se trata de reproducir el mismo error que te aparece cuando quien
>> ejecuta el script es "cron" y lo único que se me ocurre que pueda
>> causar ese mensaje de error es que cron no tome alguna variable de
>> entorno que necesita para el script...
> 
> Bueno, me gustaria que entender que es "alguna variable de entorno" (lo
> buscare en google, pero si me lo puedes explicar mejor, te lo agradecere
> camaleon.

Sí, explico.

Cuando ejecutas una tarea que has creado desde crontab, ésta se ejecuta 
con algunas variables de entorno preestablecidas, como por ejemplo (según 
indica el manual "man 5 crontab"):

$SHELL: pasa a tomar el valor de "/bin/sh", mientras que cuando ejecutas 
el script desde consola, esa variable es "/bin/bash".

$LOGNAME: esta toma el valor del usuario para el que se haya creado la 
tarea y que está definido en el archivo "/etc/passwd", por lo que en este 
caso no cambia.

$HOME: a esta le pasa lo mismo que a $LOGNAME, así que no cambia.

$PATH: se define a "/usr/bin:/bin"

Si eso lo comparas con las variables de entorno que tiene tu usuario:

sm01@stt008:~$  echo $SHELL $LOGNAME $HOME $PATH
/bin/bash sm01 /home/sm01 /usr/local/bin:/usr/bin:/bin:/usr/games

Verás que algunas cambian.

¿Y qué sucede con la variable de entorno $LANG cuando el script lo 
ejecuta crontab? Pues que se define a "LANG=POSIX" (creo... que alguien 
me corrija si es otro) así que para evitar que se genere ese mensaje de 
error que te envía por correo el crontab cada vez que se ejecuta la 
rutina, tendrías que definir la variable "LANG=es_ES.UTF-8" (que es la 
que usa tu usuario habitual y por eso cuando ejecutas el script desde una 
terminal no te aparece ningún mensaje de error) dentro de la rutina del 
crontab y debería funcionar... lo que se me escapa es por qué no está 
funcionando en este caso, quizá haya que definirla en otro lado :-?

Bueno, al menos esa era mi teoría :-)

Saludos, 

-- 
Camaleón


Reply to: