Ayuda con Crontab

Hola.

Os pongo en contexto: un sencillo script que elimine semanalmente todos los archivos .torrent. El script (si se le puede llamar asi :) ) funciona. Pero el crontab no...

Actualmente está así: (la hora la voy moviendo según voy haciendo pruebas)
32 13 * * 7 sh home/fran/Documentos/borra_torrents.sh >/dev/null 2>&1


También he probado con:
32 13 * * 7 fran home/fran/Documentos/borra_torrents.sh >/dev/null 2>&1


Lei que había que darle permisos:
chmod a+x /home/fran/Documentos/borra_torrents.sh


El log del cron, donde la primera línea se debe a que el cron intenta mandarte el reporte por mail (de ahi el ">/dev/null 2>&1" :
Feb 22 11:39:01 macuntu CRON[3848]: (CRON) info (No MTA installed, discarding output)
Feb 22 12:14:01 macuntu CRON[4051]: (fran) CMD (sh home/fran/Documentos/borra_torrents.sh >/dev/null 2>&1)
Feb 22 12:16:01 macuntu CRON[4084]: (fran) CMD (fran home/fran/Documentos/borra_torrents.sh >/dev/null 2>&1)


A simple vista está bien programado porque las líneas de log coinciden con lo que voy poniendo en el crontab pero no ejecuta el script.

Script:
#!bin/sh
#
find /home/fran/Descargas/ -name "*.torrent" -type f -delete


Casi seguro que es algo de permisos, pero no doy con la tecla, ¿alguna idea/sugerencia, por favor?

Muchas gracias.
32 13 * * 7 sh home/fran/Documentos/borra_torrents.sh >/dev/null 2>&1


Usa paths absolutos. Asi:

32 13 * * 7 /bin/sh /home/fran/Documentos/borra_torrents.sh >/dev/null 2>&1
slak escribió:
32 13 * * 7 sh home/fran/Documentos/borra_torrents.sh >/dev/null 2>&1


Usa paths absolutos. Asi:

32 13 * * 7 /bin/sh /home/fran/Documentos/borra_torrents.sh >/dev/null 2>&1



Efectivamente funciona. Ahora bien, no se por qué :). En ningún sitio he visto que hiciera falta hacerlo de esta manera. ¿Cron no sabe dónde está..."sh"?¿Por qué no "dice" nada el log?

Gracias!!
Cuando te logueas a tu usuario se le asignan una serie de variables de entorno establecidas en profile y bashrc. Entre ellas la de PATH, que le dice a bash donde encontrar los programas. Es el motivo por el que puedes ejecutar el script con tu user con solo 'sh'.

$ echo $PATH


Con eso veras los directories en los que bash busca los comandos, hay varios. Para saber donde esta un comando usa

$ which comando


Cron no tiene variables de entorno, por lo que tienes que darle siempre la ubicación completa. El log no dice nada porque estas mandando a null todo el output del comando con

>/dev/null 2>&1


Para que cron no mande mail pone esto encabezando el crontab.

MAILTO=""
Si es para hacer algo semanalmente es más sencillo meter el script directamente en /etc/cron.weekly/, además de esta manera te aseguras de que tu script se ejecutará, con el cron normal si tu pc está apagado cuando toca lanzar la tarea no se lanzará hasta la semana siguiente.
De verdad gracias por la explicación...y por el consejo también.

Un saludo a los dos.
MutantCamel escribió:Si es para hacer algo semanalmente es más sencillo meter el script directamente en /etc/cron.weekly/, además de esta manera te aseguras de que tu script se ejecutará, con el cron normal si tu pc está apagado cuando toca lanzar la tarea no se lanzará hasta la semana siguiente.

Para ello necesitas tener instalado el programa anacron.
roMZell escribió:
MutantCamel escribió:Si es para hacer algo semanalmente es más sencillo meter el script directamente en /etc/cron.weekly/, además de esta manera te aseguras de que tu script se ejecutará, con el cron normal si tu pc está apagado cuando toca lanzar la tarea no se lanzará hasta la semana siguiente.

Para ello necesitas tener instalado el programa anacron.

Cierto, aunque suele venir instalado por defecto.
7 respuestas