¿Hay algún registro extendido disponible para trabajos cron?

¿Hay algún registro extendido disponible para trabajos cron?

Tengo 3 scripts debajo /etc/cron.daily. Mis registros cron están escritos en formato /var/log/cron. La siguiente es una entrada para el cron anterior que se ejecutó.

(root) CMD (run-parts /etc/cron.hourly)

Aquí el stdouto stderrde los scripts dentro del cron no está disponible, muestra que el run-partscomando se ha ejecutado en esta carpeta.

¿Existe algún truco que pueda ayudar a registrar lo que sucedió mientras se ejecutaban los 3 scripts?

NOTA: No puedo editar los scripts cron.dailypara redirigir los errores y las salidas a un archivo de registro.

Respuesta1

En Unix, el sistema de correo es el medio por el cual las notificaciones del sistema se envían a los usuarios. Puede considerarlo como algo parecido a Windows, donde se mostrará algo en la barra de tareas con un mensaje emergente si necesita notificarle algo. Dado que los cronjobs (teóricamente) no deberían producir ningún resultado (ya que nadie debería estar allí para verlo), cualquier resultado (stdout o stderr) se trata como si fuera una posible indicación de un error o problema, por lo que se envía un correo electrónico al propietario de cronjob para solicitarle que lo revise.

Entonces, toda la salida (stdout y stderr) se envía a través del sistema de correo local al propietario del cronjob. Si el propietario es una cuenta no personal, puede indicarle al MTA local que la transmita a una cuenta de correo electrónico real configurando un alias. Por ejemplo, agregué a /etc/aliases:

root: [email protected]

Luego ejecutó el newaliasescomando (para reconstruir la base de datos de alias de correo). Después de eso, comencé a recibir correos electrónicos de root en la bandeja de entrada de mi correo corporativo:

root@xxxxxxvlp05 ~ $ echo "the game" | mutt root -s "No Diggity"
sendmail: warning: inet_protocols: IPv6 support is disabled: Address family not supported by protocol
sendmail: warning: inet_protocols: configuring for IPv4 support only
postdrop: warning: inet_protocols: IPv6 support is disabled: Address family not supported by protocol
postdrop: warning: inet_protocols: configuring for IPv4 support only

Míralo en todo su esplendor

Entonces esa es la forma más o menos normal (permitir que el sistema envíe correos electrónicos de notificación). Existen otros medios para tramitar la notificación. Algunas alternativas:

Modificar alias para guardar los correos electrónicos en un archivo en particular:

root: /var/log/rootMails

Canalizando el correo a un script:

root: |/usr/local/bin/filterMail

Una alternativa a jugar con los alias es usar la MAILTO=opción dentro del crontab del usuario que admiten muchos demonios cron. Esto podría ser preferible si solo desea recibir un conjunto particular de notificaciones del usuario y no nada que llegue a su buzón (que es lo que aliasesse logra).

Estoy seguro de que hay muchos otros, pero probablemente quieras hacer el primero o el último.

Respuesta2

Puede ejecutar cron con la -sopción de usar syslog en lugar de enviar correos electrónicos. Esto funciona al menos en RHEL y sus derivados, FreeBSD y MacOS.

Respuesta3

Puedes iniciar sesión dentro de un script bash:

logfile=/var/log/mine/whatever.log

log () {
    timestamp=$(date +'%F %T')
    echo -e "$timestamp $1" >> $logfile
    shift
    for a; do
        echo -ne "$a" >> $logfile
    done
}    

log "Hello world.\nAnd so on..."

[...]

Si está ejecutando comandos que tienen resultados que desea registrar:

somecommand 2>&1 >> $logfile

También puede enviar mensajes y errores al registrador del sistema (consulte man logger) y potencialmente ordenarlos a través de la configuración de syslog.

información relacionada