8 votos

¿Cómo comprobar si la tarea cron funciona?

Utilizo crontab -e sin sudo para editar cron jobs y añadir la siguiente línea allí -

20 22 23 10 * date "+%Y-%m-%d %H:%M:%S" >> ~/Documents/log.txt

entonces compruebo el archivo de registro y no contiene la fecha y la hora.

He intentado editar crontab como Root, pero tampoco actualiza el archivo. ¿Qué podría estar mal aquí? ¿Hay alguna forma de ver el registro de ejecución de los trabajos cron?

P.D. Actualizar crontab creado bajo Root:

0/5 * * * * /bin/date "+%Y-%m-%d %H:%M:%S" >> /tmp/log.txt
0/5 * * * * echo >> /tmp/log2.txt

log2.txt se crea ahora.

0 votos

Crontab no entiende ~ es necesario dar la ruta completa

0 votos

@Mark, he utilizado la ruta completa (en lugar de ~) con Root crontab - el resultado es el mismo, no hay registro en el archivo.

0 votos

También la ruta podría no estar configurada use la ruta completa hasta la fecha - también tenga en cuenta para OSX launchd es preferible a cron

7voto

Douglas Puntos 10417

Su cron mensaje de error se envían al mail del usuario que está ejecutando el cron trabajo.

Tipo mail en la línea de comandos para ver los mensajes. Para obtener una lista de mail consulte correo humano .

Deberías recibir un correo con un mensaje de error del tipo:

/bin/sh: -c: line 0: unexpected EOF while looking for matching `"'
/bin/sh: -c: line 1: syntax error: unexpected end of file

En cuanto a tu comando y por qué no funciona, es porque el signo "%" es un carácter de "nueva línea", lo que significa que le dice al shell que "pase a la siguiente línea". Entonces, después de que encuentra el primer "%" va a la siguiente línea y nunca ve el resto del comando. Esto se confirma por el "inesperado EOF mientras se buscaba la coincidencia ' " (comillas dobles).

La página man local de crontab ( man crontab )es bastante parco en detalles y estoy especulando que es porque cron ha quedado obsoleto para launchd 1 . Sin embargo, la página de manual de crontab de desarrollador.apple.com lo explica

El campo "sexto" (el resto de la línea) especifica el comando que se va a ejecutar. Toda la porción de comando de la línea, hasta una nueva línea o carácter %, será ejecutada por /bin/sh o por el shell especificado en la variable SHELL del archivo cron. Los signos de porcentaje (%) en el comando, a menos que se escapen con una barra invertida (\), se convertirán en caracteres de nueva línea, y todos los datos después del primer % se enviarán al comando como entrada estándar. Opcionalmente, el comando puede ir precedido de " @AppleNotOnBattery " para indicar a cron que no ejecute el comando cuando funcione con batería. Por ejemplo, el campo "sexto" al utilizar esta opción aparecería algo como "@AppleNotOnBattery /usr/bin/touch /tmp/foo"

Tu solución:

Por lo tanto, lo que tiene que hacer es "escapar" el carácter "%" con una barra invertida (\) para indicarle que lo interprete literalmente.

Tu orden debería ser:

0/5 * * * * /bin/date "+\%Y-\%m-\%d \%H:\%M:\%S" >> /tmp/log.txt

1 En man crontab : (Nota de Darwin: Aunque cron(8) y crontab(5) están soportados oficialmente en Darwin, su funcionalidad ha sido absorbida por launchd(8), que proporciona una forma más flexible de ejecutar comandos automáticamente. Véase launchctl(1) para más información).

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X