logging - failed - no mta installed, discarding output
Cron Job Log-¿Cómo iniciar sesión? (8)
Aquí está mi código:
* * * * * your_script_fullpath >> your_log_path 2>&1
Quiero saber cómo puedo ver exactamente qué están haciendo los trabajos cron en cada ejecución. ¿Dónde están ubicados 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 la tarea cron, pero todavía no he recibido nada.
De forma predeterminada, cron registra en / var / log / syslog para que pueda ver las entradas relacionadas con cron al usar:
grep CRON /var/log/syslog
https://askubuntu.com/questions/56683/where-is-the-cron-crontab-log
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 del registro cron en su propio archivo:
sudo tail -f /var/log/cron.log
Resultados 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 cron.log (o tal vez a algún otro archivo de registro).
Si desea verificar si un crontab se está ejecutando y no tiene que buscarlo en cron.log
o syslog
, cree un crontab que redirija el resultado a un archivo de registro de su elección, como por ejemplo:
# 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
Pasos tomados de: https://www.cyberciti.biz/faq/howto-create-cron-log-file-to-log-crontab-logs-in-ubuntu-linux/
En caso de que estés ejecutando algún comando con sudo, no lo permitirá. Sudo necesita un tty.
Hay al menos tres tipos diferentes de registro:
El registro ANTES de que se ejecute el programa, que solo registra SI el cronjob TRIED para ejecutar el comando. Esa se encuentra en / var / log / syslog, como ya se mencionó en @Matthew Lock.
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 se menciona en @Spliffster. Prefiero iniciar sesión en un archivo, porque con el correo electrónico ENTONCES tiene una NUEVA fuente de problemas, y está comprobando si el envío y la recepción del correo electrónico funcionan a la perfección. 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:
* * * * COMMAND_ABSOLUTE_PATH > /ABSOLUTE_PATH_TO_LOG 2>&1
- También consideraría verificar los permisos de / ABSOLUTE_PATH_TO_LOG y ejecutar el comando desde los permisos de ese usuario. Solo para verificación, mientras prueba si podría ser una fuente potencial de problemas.
- 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 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 binarios si no usa la ruta absoluta. * Las BIBLIOTECAS usadas por un binario. Es más o menos el mismo punto anterior, pero asegúrese de que, si simplemente coloca 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 el mismo que recomienda cuando usa la consola directamente. Los binarios se pueden encontrar usando el comando locate, por ejemplo:
$locate python
Asegúrese de que el binario al que se referirá sea el mismo que el que está llamando en su caparazón, o simplemente vuelva a realizar la prueba en su caparazón utilizando la ruta absoluta que planea colocar en el cronjob.
- Otra fuente común de problemas es la sintaxis en el cronjob. Recuerde que hay caracteres especiales que puede usar para listas (comas), para definir rangos (guiones -), para definir incrementos de rangos (barras), etc. Consulte: http://www.softpanorama.org/Utilities/cron.shtml
Todo lo anterior no funciona para mí. Entonces, tengo que agregar el ''MAILTO = [mi correo electrónico]'' en la parte superior del archivo del crontab en /etc/cron.d/ y recibí la respuesta porque el comando cron obtuvo errores.
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. Llegar a un buzón de correo local generalmente no es un problema (de hecho, es probable que ls -l "$MAIL"
revele que ya ha estado recibiendo algo) pero obtenerlo de la caja y salir a internet requiere el MTA (Postfix, Sendmail, ¿qué tienes? Para estar configurado correctamente para conectarse al mundo.
* * * * * myjob.sh >> /var/log/myjob.log 2>&1
registrará todos los resultados del trabajo cron en /var/log/myjob.log
Puede usar el mail
para enviar correos electrónicos. La mayoría de los sistemas enviarán salida de trabajo cron
no controlada por correo electrónico a la raíz o al usuario correspondiente.