¿Cómo puedo saber si mi trabajo cron por hora se ha ejecutado?

26

He creado un archivo llamado ntpdateen/etc/cron.hourly

#!/bin/sh
/usr/sbin/ntpdate-debian
date > /tmp/william_tmp
date > /william_tmp
date > ~/william_tmp
echo test

También hice Chmod 755 para este archivo.

Sin embargo, no puedo decir si el archivo se ha ejecutado o no.

El archivo no se crea en ninguno de los 3 directorios.

Si ejecuto manualmente cd / && run-parts --report /etc/cron.hourly, los archivos se crean y obtengo el eco.

¿Alguien puede recomendar (¡idealmente paso a paso!) Instrucciones para comprobar que está funcionando?

wilhil
fuente

Respuestas:

25

Una trampa importante para cron son las ejecuciones cron en un entorno de shell extremadamente limitado, como resultado, muchas variables no se exportan al entorno, principalmente $ PATH. Asegúrese de que utiliza todas las rutas absolutas a ejecutable, incluyendo funciones comunes como echo, uptime, date, etc todo necesidad de usar rutas completas ( /bin/echo, /bin/date, /usr/bin/uptime). Para determinar la ruta a un ejecutable, puede usar el whichcomando de la siguiente manera: which echoesto le mostrará la ruta completa a esa herramienta.

Marco Ceppi
fuente
Como se discutió en el chat, gracias por esto y realmente espero que ayude a alguien más ... Aunque hice el camino de otoño a ntpdate, estoy tan acostumbrado a Windows y echo / date simplemente "incorporado", simplemente no lo hice Creo que necesitaría una ruta completa ... ¡aprender mucho más sobre Linux y tiene mucho sentido!
wilhil
36

Debe buscar en su /var/log/syslogarchivo de registro. Si un cron se ha ejecutado, tendría una línea como:

Jun 11 19:09:01 penguin CRON[17376]: (root) CMD (  [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find /var/lib/php5/ -depth -mindepth 1 -maxdepth 1 -type f -cmin +$(/usr/lib/php5/maxlifetime) ! -execdir fuser -s {} 2>/dev/null \; -delete)
Jun 11 19:17:01 penguin CRON[17799]: (root) CMD (   cd / && run-parts --report /etc/cron.hourly)

Para obtener sugerencias de solución de problemas, consulte https://help.ubuntu.com/community/CronHowto#Troubleshooting_and_Common_Problems

Lekensteyn
fuente
No hay nada en Syslog y no veo ninguna razón por la que podría fallar desde ese enlace :(
wilhil
1
Si no hay entradas en syslog ( grep -i cron /var/log/syslog /var/log/syslog.1), comience a verificar si el demonio cron se está ejecutando: ps uww -C crondebe contener una línea con un proceso.
Lekensteyn
Lo siento por ser engañoso, hay entradas para Cron en el registro del sistema, simplemente nada relacionado con este comando ... Sé que algunos trabajos se ejecutan cada hora, recibo una nueva alerta de correo ... AFAIK, los que están funcionando son de crontab, no hay nada en cron.hourly, que es lo que estoy tratando de hacer funcionar
wilhil
2

Intente cambiar la primera línea de su guión (el intérprete) a:

#!/bin/bash

También he tenido problemas en el pasado, con variables de entorno y problemas de RUTA. Después de cambiar el intérprete a bashmis problemas desaparecieron.

Awi
fuente
1

Dado que he agregado el clearme.shscript en/etc/cron.hourly/

Simplemente filtre las tareas CRON en la terminal con el poderoso egrep y awk :

$ cat /var/log/syslog | egrep clearme | awk "{ print $1 }" > ~/Desktop/cronlog.txt

La salida se verá así:

Jan 14 15:20:01 markets-dev CRON[10089]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)
Jan 14 15:40:01 markets-dev CRON[18042]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)
Jan 14 16:00:01 markets-dev CRON[22817]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)
Jan 14 16:20:01 markets-dev CRON[28183]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)
Jan 14 16:40:01 markets-dev CRON[411]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)
Jan 14 17:00:01 markets-dev CRON[5442]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)
Jan 14 17:20:01 markets-dev CRON[11935]: (dminca) CMD (root /etc/cron.hourly/clearme.sh)

Para explicar todo paso a paso:

  1. cat / var / log / syslog : imprime el registro del sistema
  2. egrep clearme , pero solo seleccione filas que contengan el texto clearme
  3. awk "{print $ 1}" : imprime esa fila que contiene el texto clearme
  4. > ~ / Desktop / cronlog.txt : genera los resultados en el archivo cronlog.txt ubicado en el directorio Desktop .

El cuarto paso es opcional. Simplemente imprimirá los resultados en el terminal en lugar del archivo.

Daniel Andrei Mincă
fuente