Quiero saber cómo puedo ver exactamente qué están haciendo los trabajos cron en cada ejecución. ¿Dónde se encuentran los archivos de registro? ¿O puedo enviar la salida a mi correo electrónico? He configurado la dirección de correo electrónico para enviar el registro cuando se ejecuta el trabajo cron pero aún no he recibido nada.
218
Respuestas:
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áncron
trabajos no manejados por correo electrónico a la raíz o al usuario correspondiente.fuente
2>&1
: stackoverflow.com/questions/818255/in-the-bash-shell-what-is-21stderr
ystdout
en el registro,2>&1
debe venir después de la indirección:myjob.sh >> /var/log/myjob.log 2>&1
YYYY-MM-DD_hh-mm-sec
en el nombre del archivo de salida, para que cada nombre de archivo sea diferente y se mantenga sin reescribir?date +\%Y\%m\%d\%H\%M\%S
-cron.log 2> & 1De manera predeterminada, cron registra en / var / log / syslog para que pueda ver las entradas relacionadas con cron utilizando:
/ubuntu/56683/where-is-the-cron-crontab-log
fuente
journalctl | grep cron
en sistemas systemd/var/log/cron
en AWS Linux AMI.sudo journalctl -u cron
cron
se está registrando depende mucho del sistema. Hay una respuesta separada con detalles sobre cómo se configuran varios destinos de registro en sistemas Linux (o más correctamente, sistemas que usansyslog
). Otros sistemas pueden tener una forma diferente de configurar estas cosas.Aquí está mi código:
fuente
>>
agrega y2>&1
dice que envíe un error estándar al mismo lugar que la salida estándar.Hay al menos tres tipos diferentes de registro:
El registro ANTES de ejecutar el programa, que solo registra SI el cronjob TRATÓ de ejecutar el comando. Ese se encuentra en / var / log / syslog, como ya lo mencionó @Matthew Lock.
El registro de errores DESPUÉS de que el programa intentó ejecutarse, que puede enviarse a un correo electrónico o a un archivo, como lo menciona @Spliffster. Prefiero iniciar sesión en un archivo, porque con el correo electrónico ENTONCES tienes una NUEVA fuente de problemas, y está comprobando si el envío y la recepción del correo electrónico funcionan perfectamente. A veces lo es, a veces no lo es. Por ejemplo, en una máquina de escritorio común simple en la que no está interesado en configurar un smtp, a veces preferirá iniciar sesión en un archivo:
Hay algunas fuentes comunes de problemas con cronjobs: * La RUTA ABSOLUTA del binario que se ejecutará. Cuando lo ejecuta desde su shell, podría funcionar, pero el proceso cron parece usar otro entorno y, por lo tanto, no siempre encuentra archivos 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 al que se refiere con la ruta absoluta es lo mismo a lo que se refiere cuando usa la consola directamente. Los binarios se pueden encontrar utilizando el comando de localización, por ejemplo:
Asegúrese de que el binario al que hará referencia sea el mismo que está llamando en su shell, o simplemente pruebe nuevamente en su shell utilizando la ruta absoluta que planea poner en el cronjob.
fuente
En Ubuntu, puede habilitar un
cron.log
archivo que contenga solo las entradas CRON.Descomente la línea que menciona
cron
en el/etc/rsyslog.d/50-default.conf
archivo:Guarde y cierre el archivo y luego reinicie el
rsyslog
servicio:Ahora puede ver las entradas de registro cron en su propio archivo:
Resultados de muestra:
Sin embargo, no verá más información sobre qué scripts se ejecutaron realmente en el interior
/etc/cron.daily
o/etc/cron.hourly
, a menos que esos scripts dirijan la salida al 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
cron.log
osyslog
crear un crontab que redirija la salida a un archivo de registro de su elección, algo como:Pasos tomados de: https://www.cyberciti.biz/faq/howto-create-cron-log-file-to-log-crontab-logs-in-ubuntu-linux/
fuente
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 elcrontab
archivo para enviar los correos electrónicos a una cuenta diferente.Para que esto funcione, debe tener el correo funcionando correctamente. Por lo general, enviar a un buzón local no es un problema (de hecho, es probable
ls -l "$MAIL"
que revele que ya ha estado recibiendo algunos), pero sacarlo de la caja y ponerlo en Internet requiere el MTA (Postfix, Sendmail, qué tiene) estar correctamente configurado para conectarse al mundo.Si no hay salida, no se generará correo electrónico.
Una disposición común es redirigir la salida a un archivo, en cuyo caso, por supuesto, el demonio cron no verá que el trabajo devuelva ninguna salida. Una variante es redirigir la salida estándar a un archivo (o escribir el script para que nunca imprima nada; tal vez almacena los resultados en una base de datos o realiza tareas de mantenimiento que simplemente no generan nada) y solo recibe un correo electrónico si existe Es un mensaje de error.
Para redirigir ambas secuencias de salida, la sintaxis es
Observe cómo agregamos (doble
>>
) en lugar de sobrescribir, para que la salida de cualquier trabajo anterior no sea reemplazada por la siguiente.Como se sugiere en muchas respuestas aquí, puede hacer que ambas secuencias de salida se envíen a un solo archivo; reemplace la segunda redirección con
2>&1
para decir "el error estándar debería ir a donde sea que vaya la salida estándar". (Pero no apoyo especialmente esta práctica. Tiene sentido principalmente si realmente no espera nada en la salida estándar, pero puede haber pasado por alto algo, tal vez proveniente de una herramienta externa que se llama desde su script).cron
los trabajos se ejecutan en su directorio de inicio, por lo que cualquier nombre de archivo relativo debe ser relativo a eso. Si desea escribir fuera de su directorio de inicio, obviamente debe asegurarse por separado de tener acceso de escritura a ese archivo de destino.Un antipatrón común es redirigir todo a
/dev/null
(y luego pedirle a Stack Overflow que lo ayude a descubrir qué salió mal cuando algo no funciona; ¡pero tampoco podemos ver la salida perdida!)Desde su script, asegúrese de mantener separados los resultados regulares (resultados reales, idealmente en forma legible por máquina) y los diagnósticos (generalmente formateados para un lector humano). En un script de shell,
Algunas plataformas (y, por ejemplo, GNU Awk) le permiten usar el nombre de archivo
/dev/stderr
para mensajes de error, pero esto no es adecuadamente portátil; en Perlwarn
edie
imprima con error estándar; en Python, escribasys.stderr
o uselogging
; en Ruby, inténtalo$stderr.puts
. Observe también cómo los mensajes de error deben incluir el nombre del script que produjo el mensaje de diagnóstico.fuente
En caso de que esté ejecutando algún comando con sudo, no lo permitirá. Sudo necesita un poco.
fuente
sudo
configuración. Las cosas que deben ejecutarse sin una forma de proporcionar una contraseña deben configurarseNOPASSWD:
en susudoers
configuración.Cuando especifique un correo electrónico válido, recibirá la salida del trabajo cron que se ejecuta. Por lo tanto, podrá verificarlo y asegurarse de que todo se haya ejecutado correctamente. Tenga en cuenta que no recibirá un correo electrónico si no hay salida del comando cron job.
Tenga en cuenta que recibirá un correo electrónico para cada uno de los trabajos cron ejecutados. Esto puede inundar su bandeja de entrada en caso de que sus cron se ejecuten con demasiada frecuencia
fuente