PDA

Ver la versión completa : script bash no se ejecuta bien con cron ?¿?¿



crossmax
26/04/2012, 14:32
Buenas gperos!
Por aqui ando otra vez con dudas linuxeras.
Lo que me pasa es un poco raro. Tengo un script que procesa los xml contenidos en una serie de directorios.
Para recorrerlos tengo la instruccion:

for file in $(find $DIR/$DIR2/ -type f -name '*.xml'); do

Los directorios son rutas absolutas.

Si ejecuto yo ese script desde consola me lo hace sin problemas, pero si lo ejecuto desde cron la instruccion find $DIR/$DIR2/ -type f -name '*.xml' no funciona y no encuentra ningun fichero, por lo que hace el resto de instrucciones del script a excepcion de lo que hay dentro del for.

Porque desde cron no me encuentra los xml?

efegea
26/04/2012, 14:46
¿Permisos? ¿cron tiene permiso para acceder a los ficheros? (tanto los ficheros como todos los directorios que forman la ruta)

crossmax
26/04/2012, 14:49
Y como puedo saber los permisos de cron?
Al configurar cron con mi usuario pensé que tendría el mismo permiso que tengo yo. Y yo, como decía, puedo ejecutar correctamente el script

efegea
26/04/2012, 14:51
Ahora mismo no sé, además hace unos cuantos años que no toco linux, pero normalmente cron se ha ejecutado siempre con su propio usuario y grupo, por temas de seguridad. Supongo que ya dependerá de la distro y de si ha cambiado algo en las políticas de cada distro desde que yo no las toco..

JoJo_ReloadeD
26/04/2012, 15:09
Y como puedo saber los permisos de cron?
Al configurar cron con mi usuario pensé que tendría el mismo permiso que tengo yo. Y yo, como decía, puedo ejecutar correctamente el script

Esto es asi. Pega la linea del cron.

crossmax
26/04/2012, 15:14
He puesto todo con permisos 777 y sigue sin ir.

Esto es lo que me pides JoJo?


$ crontab -l
# DO NOT EDIT THIS FILE - edit the master and reinstall.
# (/tmp/crontab.J1LGq0bUoz installed on Thu Apr 26 13:52:00 2012)
# (Cron version V5.0 -- $Id: crontab.c,v 1.12 2004/01/23 18:56:42 vixie Exp $)
*/1 * * * * sh /cygdrive/e/cygwin/home/ntsec/scripts_srv/iso2utf.sh >> /cygdrive/e/cygwin/home/ntsec/scripts_srv/logs/iso2utf.txt

*/1 * * * * sh /cygdrive/e/cygwin/home/ntsec/scripts_srv/launcher.sh >> /cygdrive/e/cygwin/home/ntsec/scripts_srv/logs/logsErr.txt

juanvvc
26/04/2012, 16:01
¿Cómo generas $DIR/$DIR2/?

Ten en cuenta que cron no se ejecuta como "login shell", así que puede haber alguna variable global que no se inicializa como piensas.

efegea
26/04/2012, 16:09
Eso de cygwin.....¿es una partición windows? Eso sí te puede dar problemas de permisos, ¿cómo la montas? A veces necesitas especificar el uid, gid y/o umask a la hora de montar. O cualquier otra opción, depende del sistema de ficheros.

Lo de las variables como dice juanvvc también puede ser.

JoJo_ReloadeD
26/04/2012, 16:11
Pasale la ruta completa al binario sh:


*/1 * * * * /bin/sh /cygdrive/e/cygwin/home/ntsec/scripts_srv/launcher.sh >> /cygdrive/e/cygwin/home/ntsec/scripts_srv/logs/logsErr.txt

SplinterGU
26/04/2012, 16:41
lo que puso juanvvc era lo que iba a preguntar yo.

por lo que veo, esas corriendo el crontab en windows, con cygwin, pero funciona el crontab en windows? la verdad que nunca lo probe en windows, menos desde cygwin, si use otros programas cron para windows.

---------- Post añadido a las 11:41 ---------- Post anterior a las 11:39 ----------


Eso de cygwin.....¿es una partición windows? Eso sí te puede dar problemas de permisos, ¿cómo la montas? A veces necesitas especificar el uid, gid y/o umask a la hora de montar. O cualquier otra opción, depende del sistema de ficheros.

Lo de las variables como dice juanvvc también puede ser.

es el disco E:

crossmax
27/04/2012, 07:39
Gracias por las respuestas.
A ver, creo que problemas de montajes, rutas del binario y ejecucion del cron no es. Y me explico; no es porque otros scripts se estan ejecutando, y comprueban ficheros del mismo disco pero de una carpeta a igual nivel pero con otro nombre (sin el bucle for). Ademas, el script que me da problemas ejecuta la sentencia en caso de que el bucle for salga sin recorrerse, por lo que si tengo trazas en el logsErr.txt.

Genero las rutas asi:

DIR='/cygdrive/e/cygwin/home/ntsec'
DIR2='FICH_VALS'
DIR3='scripts_srv'

En DIR3 tengo el script
El error debe ser el for, que por lo que sea a cron no lo gusta. He probado en otro script a imprimir la salida de ese find:

echo " $(find /cygdrive/e/cygwin/home/ntsec/scripts_srv -name "*.sh")"
echo " $(ls $DIR) "

La primera linea no me imprime nada pero la segunda sí....

-------------------------------------------------
OLVIDAD LO QUE HE DICHO!
Mientras escribia esto y gracias a intentar explicar todas las pruebas que he hecho se me ha ocurrido en que el problema estaba en el comando find. Como hablabais de la ruta absoluta del binario he probado a ponersela al find... y tachán! Ha funcionado!! :-)

Gracias, sois unos cracks!!!