GNU/Linux >> Linux Esercitazione >  >> Linux

Output di Mail Cron solo quando Git genera un errore reale?

Esiste un repository Git che si trova su un server, vogliamo generare un output doxygen per esso su un server diverso. Il seguente comando funziona per me ma ha lo svantaggio di inviare una mail ogni volta che il repository viene aggiornato perché Git usa stderr per la segnalazione dei progressi (una rapida ricerca tramite l'onnipotente Oracle suggerisce che considerino questo comportamento una funzionalità).

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

Mentre potevo grep attraverso l'output stderr di Git o confrontarlo con una stringa nota questo sembra sbagliato. Sto usando il comando Git sbagliato? Come si farebbe correttamente?

Per chiarimenti, voglio comunque che questo comando invii una mail se si verifica un errore reale, quindi il semplice reindirizzamento di stderr non sarà di aiuto.

Risposta accettata:

Fare troppo affidamento sulle capacità di mailing di crond può causare vari problemi. A seconda del tuo crond, forse non sono abbastanza flessibili.

Ad esempio, spesso, come hai descritto, non è possibile configurare che solo uno stato di uscita !=0 debba attivare l'invio di stdout/stderr. Un altro problema è che, ad esempio, il crond di Solaris ha un limite di dimensioni (relativamente) piccolo sull'output che cattura/invia.

Pertanto, per tali situazioni, suggerisco di scrivere un piccolo script di supporto che chiama i comandi e reindirizza l'output a un file di registro temporaneo. Può tenere traccia internamente dello stato di uscita di tutti i programmi e se uno è !=0 può essere:

  • cat the log-file su stdout
  • invialo tramite uno strumento di posta a riga di comando
  • o semplicemente emetti una breve diagnostica che includa la posizione del file di log

Qualcosa come:

$ 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. Come correggere l'errore di errore di autenticazione Cron in Linux?

  2. Errore SFTP Messaggio ricevuto troppo lungo

  3. git add restituisce fatal:errore del repository esterno

  4. tput:nessun valore per $TERM e nessun errore -T specificato registrato dal processo CRON

  5. ERRORE:impossibile disinstallare 'wrapt'. durante l'installazione di tensorflow-gpu~=1.14

gcsfuse Errore di input/output

Errore durante l'utilizzo dell'helper delle credenziali Git con gnome-keyring come Sudo

Come visualizzare un cron job attualmente in esecuzione?

errore di input/output di ubuntu

Salta la richiesta del nome utente quando usi git

Perché slabtop -o restituisce solo le prime 23 righe quando il comando viene reindirizzato?