¿Cómo verificar si el trabajo cron funciona?

3

Utilizo crontab -e sin sudo para editar trabajos cron y agrego la siguiente línea allí -

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

luego verifico el archivo de registro y no contiene la fecha y la hora.

Intenté 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 trabajos cron?

P.S. Actualización de 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.

    
pregunta LA_ 23.10.2016 - 21:34

1 respuesta

3

Su mensaje de error cron se envía a la cuenta mail del usuario que está ejecutando el trabajo cron .

Escriba mail en la línea de comando para ver los mensajes. Para obtener una lista de los comandos mail , consulte man man .

Debería recibir un mensaje de error con un mensaje de error en el sentido de:

/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 su 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 "vaya 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 con el "EOF inesperado mientras se busca el '' '(comillas dobles).

La página de manual local de crontab ( man crontab ) es bastante escasa con los detalles y estoy especulando porque se ha desaprobado cron para launchd 1 . Sin embargo, la página de manual de crontab de developer.apple.com lo explica

  

El campo "sexto" (el resto de la línea) especifica el comando a ser   correr. La parte completa del comando de la línea, hasta una nueva línea o el carácter%, se ejecutará mediante / bin / sh o mediante el shell especificado en la variable SHELL del archivo cron. Los signos de porcentaje (%) en el comando, a menos que se escapen con barra invertida (\), se cambiarán a caracteres de nueva línea, y todos los datos después del primer% se enviarán al comando como entrada estándar. El comando puede ser prefijado opcionalmente por " @AppleNotOnBattery " para decirle a cron que no ejecute el comando cuando funciona con la energía de la batería. Por ejemplo, el campo "sexto" al usar esta opción aparecerá algo como "@AppleNotOnBattery /usr/bin/touch /tmp/foo"


Tu solución:

Entonces, lo que debe hacer es "escapar" del carácter "%" con una barra invertida (\) para que le indique que lo interprete literalmente.

Tu comando debe ser:

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

1 De man crontab : (Nota de Darwin: Aunque cron (8) y crontab (5) son compatibles con Darwin, su funcionalidad ha sido absorbida por launchd (8). que proporciona una manera más flexible de ejecutar comandos automáticamente. Consulte launchctl (1) para obtener más información.)

    
respondido por el Allan 23.10.2016 - 23:59

Lea otras preguntas en las etiquetas