GNU/Linux >> Znalost Linux >  >> Linux

Výstup Mail Cron pouze tehdy, když Git vyvolá skutečnou chybu?

Existuje Git repo, které je na jednom serveru, chceme pro něj generovat doxygenový výstup na jiném serveru. Následující příkaz funguje pro mě, ale má nevýhodu v tom, že posílá e-mail pokaždé, když je repo aktualizováno, protože Git používá stderr pro hlášení pokroku (rychlé vyhledávání pomocí všemocného orákula naznačuje, že toto chování považují za funkci).

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

Zatímco jsem mohl grep přes výstup stderr Git nebo jej porovnat se známým řetězcem to vypadá špatně. Používám špatný příkaz Git? Jak by to bylo správně provedeno?

Pro upřesnění stále chci, aby tento příkaz poslal e-mail, pokud dojde ke skutečné chybě, takže pouhé přesměrování stderr nepomůže.

Přijatá odpověď:

Přílišné spoléhání se na poštovní schopnosti crond může způsobit různé problémy. V závislosti na vašem crondu možná nejsou dostatečně flexibilní.

Například často, jak jste popsali, nelze nakonfigurovat, že pouze stav ukončení !=0 by měl spouštět zasílání pošty stdout/stderr. Dalším problémem je, že například crond Solaris má (relativně) malý limit velikosti výstupu, který zachycuje/odesílá poštou.

Proto pro takové situace navrhuji napsat malý pomocný skript, který volá příkazy a přesměruje výstup do dočasného souboru protokolu. Může interně sledovat stav ukončení všech programů a pokud je jeden !=0, buď:

  • přesuňte soubor protokolu na stdout
  • pošlete jej prostřednictvím poštovního nástroje příkazového řádku
  • nebo pouze vygenerujte krátkou diagnostiku, která obsahuje umístění souboru protokolu

Něco jako:

$ 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. Crontab Log:Jak protokolovat výstup mého skriptu Cron

  2. Chyba SFTP Přijatá zpráva je příliš dlouhá

  3. git add vrací fatální:chyba mimo úložiště

  1. Chyba vstupu/výstupu gcsfuse

  2. Chyba při použití pomocníka pověření Git se svazkem klíčů gnome jako Sudo

  3. Jak zobrazit aktuálně spuštěnou úlohu cronu?

  1. Jak opravit chybu Cron Authentication Failure v Linuxu?

  2. chyba vstupu/výstupu ubuntu

  3. Proč slabtop -o vrací pouze prvních 23 řádků, když je příkaz rourou?