GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Mail-Cron-Ausgabe nur, wenn Git einen echten Fehler auslöst?

Es gibt ein Git-Repo, das sich auf einem Server befindet, wir möchten die Doxygen-Ausgabe dafür auf einem anderen Server generieren. Der folgende Befehl funktioniert für mich, hat aber den Nachteil, dass jedes Mal eine E-Mail gesendet wird, wenn das Repo aktualisiert wird, da Git stderr für Fortschrittsberichte verwendet (eine schnelle Suche über das allmächtige Orakel legt nahe, dass sie dieses Verhalten als Feature betrachten).

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

Während ich grep konnte Durch die stderr-Ausgabe von Git oder durch Vergleich mit einer bekannten Zeichenfolge scheint dies falsch zu sein. Verwende ich den falschen Git-Befehl? Wie würde dies richtig gemacht?

Zur Verdeutlichung möchte ich, dass dieser Befehl immer noch eine E-Mail sendet, wenn ein echter Fehler auftritt, also hilft ein einfaches Umleiten von stderr nicht.

Akzeptierte Antwort:

Sich zu sehr auf die Mailing-Fähigkeiten von crond zu verlassen, kann zu verschiedenen Problemen führen. Je nach Ihrem Crond sind sie vielleicht einfach nicht flexibel genug.

Beispielsweise kann man, wie Sie beschrieben haben, oft nicht konfigurieren, dass nur ein Exit-Status !=0 das Mailen von stdout/stderr auslösen soll. Ein weiteres Problem ist, dass zum Beispiel der Solaris-Crond eine (relativ) kleine Größenbeschränkung für die Ausgabe hat, die er erfasst/mailt.

Daher schlage ich für solche Situationen vor, ein kleines Hilfsskript zu schreiben, das die Befehle aufruft und die Ausgabe in eine temporäre Protokolldatei umleitet. Es kann intern den Exit-Status aller Programme verfolgen und wenn eines !=0 ist, entweder:

  • cat die Log-Datei nach stdout
  • über ein Befehlszeilen-Mail-Tool versenden
  • oder nur kurze Diagnosen ausgeben, die den Speicherort der Protokolldatei enthalten

Etwas wie:

$ 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. Wie behebt man den Cron-Authentifizierungsfehler unter Linux?

  2. @reboot von Crontab funktioniert nur für Root?

  3. Verwenden Sie CRON-Jobs, um die URL zu besuchen?

  4. Berechtigung beim Klonen des Git-Repositorys verweigert

  5. Fehler bei der Verwendung von Git Credential Helper mit gnome-keyring als Sudo

gcsfuse Eingabe-/Ausgabefehler

FEHLER:„Wrapt“ kann nicht deinstalliert werden. bei der Installation von tensorflow-gpu~=1.14

Wie kann ich die Ergebnisse meiner Cronjobs anzeigen?

Ubuntu-Eingabe-/Ausgabefehler

Interpretieren von dd Input/Output-Fehler

Fehler beim Versuch, Xorg zu verwenden:Nur Konsolenbenutzer dürfen den X-Server ausführen?