cron jobs - cómo iniciar sesión?


Quiero saber cómo puedo ver exactamente lo que los trabajos cron están haciendo en cada ejecución. ¿Dónde se encuentran los archivos de registro? ¿O puedo enviar la salida a mi correo electrónico? He establecido la dirección de correo electrónico para enviar el registro cuando se ejecuta el trabajo cron, pero no he recibido nada todavía.

 154
Author: codeforester, 2011-01-27

7 answers

* * * * * myjob.sh >> /var/log/myjob.log 2>&1

Registrará toda la salida del trabajo cron en /var/log/myjob.log

Puede usar mail para enviar correos electrónicos. La mayoría de los sistemas enviarán unhandled cron job output por correo electrónico a root o al usuario correspondiente.

 249
Author: Spliffster,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-06-19 15:56:27

Por defecto cron registra en / var / log / syslog para que pueda ver entradas relacionadas con cron usando:

grep CRON /var/log/syslog

Https://askubuntu.com/questions/56683/where-is-the-cron-crontab-log

 49
Author: Matthew Lock,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-13 12:22:42

Aquí está mi código:

* * * * * your_script_fullpath >> your_log_path 2>&1
 9
Author: Haimei,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-06-05 21:03:23

Hay al menos tres tipos diferentes de registro:

  1. El registro ANTES de que se ejecute el programa, que solo registra SI el cronjob INTENTÓ ejecutar el comando. Que se encuentra en / var/log / syslog, como ya ha mencionado @Matthew Lock.

  2. El registro de errores DESPUÉS de que el programa intentó ejecutarse, que se puede enviar a un correo electrónico o a un archivo, como menciona @Spliffster. Prefiero el registro a un archivo, porque con el correo electrónico ENTONCES usted tiene una NUEVA fuente de problemas, y su comprobación si el envío de correo electrónico y la recepción está funcionando perfectamente. A veces lo es, a veces no. Por ejemplo, en un máquina de escritorio común simple en la que no está interesado configurando un smtp, a veces preferirá iniciar sesión en un archivo:

     * * * *  COMMAND_ABSOLUTE_PATH > /ABSOLUTE_PATH_TO_LOG 2>&1
    
    • También consideraría comprobar los permisos de /ABSOLUTE_PATH_TO_LOG, y ejecutar el comando desde los permisos de ese usuario. Solo para la verificación, mientras se prueba si podría ser una fuente potencial de problema.
  3. El registro del programa en sí, con su propio manejo de errores y registro con fines de seguimiento.

Hay algunas fuentes comunes de problemas con cronjobs: * La RUTA ABSOLUTA del binario a ejecutar. Cuando se ejecuta desde su shell, podría funcionar, pero el proceso cron parece utilizar otro entorno, y por lo tanto no siempre encuentra binarios si no usa la ruta absoluta. * Las BIBLIOTECAS utilizadas por un binario. Es más o menos el mismo punto anterior, pero asegúrese de que, si simplemente pone el NOMBRE del comando, se refiere exactamente al binario que usa la misma biblioteca, o mejor, verifique si el binario que se refiere con la ruta absoluta es el mismo que se refiere cuando usa la consola directamente. Los binarios se pueden encontrar usando el comando locate, por ejemplo:

$locate python

Asegúrese de que el binario que va a referir, es el mismo que el binario que está llamando en su shell, o simplemente pruebe de nuevo en tu shell usando la ruta absoluta que planeas poner en el cronjob.

  • Otra fuente común de problemas es la sintaxis del cronjob. Recuerde que hay caracteres especiales que puede usar para listas (comas), para definir rangos (guiones -), para definir incrementos de rangos (barras), etc. Echa un vistazo: http://www.softpanorama.org/Utilities/cron.shtml
 9
Author: David L,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-04-15 12:15:57

En Ubuntu puede habilitar un archivo cron.log para contener solo las entradas CRON.

Descomente la línea que menciona cron en el archivo /etc/rsyslog.d/50-default.conf:

#  Default rules for rsyslog.
#

#                       For more information see rsyslog.conf(5) and /etc/rsyslog.conf

#
# First some standard log files.  Log by facility.
#
auth,authpriv.*                 /var/log/auth.log
*.*;auth,authpriv.none          -/var/log/syslog
#cron.*                          /var/log/cron.log

Guarde y cierre el archivo y luego reinicie el servicio rsyslog:

sudo systemctl restart rsyslog

Ahora puede ver las entradas de cron log en su propio archivo:

sudo tail -f /var/log/cron.log

Salidas de muestra:

Jul 18 07:05:01 machine-host-name CRON[13638]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1)

Sin embargo, no verá más información sobre qué scripts se ejecutaron realmente dentro de /etc/cron.daily o /etc/cron.hourly, a menos que esos scripts dirijan la salida a el cron.log (o tal vez a algún otro archivo de registro).

Si desea verificar si se está ejecutando un crontab y no tiene que buscarlo en cron.log o syslog, cree un crontab que redirija la salida a un archivo de registro de su elección, algo así como:

# For more information see the manual pages of crontab(5) and cron(8)
#
# m h  dom mon dow   command
30 2 * * 1 /usr/local/sbin/certbot-auto renew >> /var/log/le-renew.log 2>&1

Medidas adoptadas a partir de: https://www.cyberciti.biz/faq/howto-create-cron-log-file-to-log-crontab-logs-in-ubuntu-linux/

 2
Author: Gianfranco P.,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-07-18 07:19:56

En caso de que esté ejecutando algún comando con sudo, no lo permitirá. Sudo necesita un tty.

 1
Author: Saad Masood,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-10-16 22:05:46

cron ya envía la salida estándar y el error estándar de cada trabajo que ejecuta por correo al propietario del trabajo cron.

Puede usar MAILTO=recipient en el archivo crontab para que los correos electrónicos se envíen a una cuenta diferente.

Para que esto funcione, necesita que el correo funcione correctamente. La entrega a un buzón local generalmente no es un problema (de hecho, es probable que ls -l "$MAIL" revele que ya ha estado recibiendo algunos), pero sacarlo de la caja y ponerlo en Internet requiere la MTA (Postfix, Sendmail, lo que tienes) para ser configurado correctamente para conectarse al mundo.

 1
Author: tripleee,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-23 06:56:05