GNU/Linux >> Tutoriales Linux >  >> Linux

¿La salida de Mail Cron solo cuando Git arroja un error real?

Existe un repositorio de Git que está en un servidor, queremos generar una salida de doxygen para él en un servidor diferente. El siguiente comando funciona para mí, pero tiene la desventaja de enviar un correo electrónico cada vez que se actualiza el repositorio porque Git usa stderr para informar sobre el progreso (una búsqueda rápida a través del oráculo todopoderoso sugiere que consideran este comportamiento como una característica).

59 * * * * cd FQNameOfRepo; git pull 1>/dev/null; make doc-all 1>/dev/null; cp doc/latex/refman.pdf doc/html/

Si bien podría grep a través de la salida stderr de Git o compararlo con una cadena conocida, esto parece incorrecto. ¿Estoy usando el comando Git incorrecto? ¿Cómo se haría esto correctamente?

Para aclarar, aún quiero que este comando envíe un correo electrónico si ocurre un error real, por lo que simplemente redirigir stderr no ayudará.

Respuesta aceptada:

Confiar demasiado en las capacidades de correo de crond puede generar varios problemas. Dependiendo de su cliente, quizás no sean lo suficientemente flexibles.

Por ejemplo, a menudo, como usted describió, uno no puede configurar que solo un estado de salida! =0 deba activar el envío de stdout/stderr. Otro problema es que, por ejemplo, el crond de Solaris tiene un límite de tamaño (relativamente) pequeño en la salida que captura/envía.

Por lo tanto, para tales situaciones, sugiero escribir un pequeño script de ayuda que llame a los comandos y redirija la salida a un archivo de registro temporal. Puede realizar un seguimiento interno del estado de salida de todos los programas y, si uno es !=0, puede:

  • transfiera el archivo de registro a la salida estándar
  • envíelo a través de una herramienta de correo de línea de comandos
  • o simplemente genere diagnósticos breves que incluyan la ubicación del archivo de registro

Algo como:

$ cat helper.sh
set -u
set -e

# setup log-file $LOG
# ...

cd FQNameOfRepo
set +e

git pull 1>/dev/null 2>> $LOG
r1=$?
make doc-all 1>/dev/null 2>> $LOG
r2=$?
cp doc/latex/refman.pdf doc/html/ 2>> $LOG
r3=$?

set -e

if [ $r1 -ne 0 -o $r2 -ne 0 -o $r3 -ne 0 ]; then
    # do some stuff, print/mail $LOG or something like that, etc.
    # ...
    exit 23
fi

Linux
  1. ¿El @reboot de Crontab solo funciona para root?

  2. Crontab Log:cómo registrar la salida de mi secuencia de comandos Cron

  3. Error SFTP Mensaje recibido demasiado largo

  4. git add return fatal:error de repositorio externo

  5. tput:ningún valor para $TERM y ningún error especificado -T registrado por el proceso CRON

Error al usar el asistente de credenciales de Git con gnome-keyring como Sudo

¿Cómo ver un trabajo cron que se está ejecutando actualmente?

Omitir solicitud de nombre de usuario al usar git

error startx al configurar el servidor X en archlinux

Interpretando el error de entrada/salida dd

¿Por qué slabtop -o solo devuelve las primeras 23 líneas cuando se canaliza el comando?