GNU/Linux >> Tutoriels Linux >  >> Linux

Mail Cron Output uniquement lorsque Git lance une vraie erreur ?

Il existe un référentiel Git qui se trouve sur un serveur, nous voulons générer une sortie doxygen pour celui-ci sur un serveur différent. La commande suivante fonctionne pour moi mais a l'inconvénient d'envoyer un e-mail chaque fois que le dépôt est mis à jour car Git utilise stderr pour les rapports de progression (une recherche rapide via le tout-puissant oracle suggère qu'ils considèrent ce comportement comme une fonctionnalité).

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

Alors que je pouvais grep via la sortie stderr de Git ou comparez-la à une chaîne connue, cela semble faux. Est-ce que j'utilise la mauvaise commande Git ? Comment cela serait-il fait correctement ?

Pour plus de clarté, je veux toujours que cette commande envoie un courrier si une erreur réelle se produit, donc simplement rediriger stderr n'aidera pas.

Réponse acceptée :

Trop compter sur les capacités de messagerie de crond peut entraîner divers problèmes. En fonction de votre crond, ils ne sont peut-être tout simplement pas assez flexibles.

Par exemple, souvent, comme vous l'avez décrit, on ne peut pas configurer que seul un état de sortie !=0 doit déclencher l'envoi de stdout/stderr. Un autre problème est que, par exemple, le crond Solaris a une limite de taille (relativement) petite sur la sortie qu'il capture/envoie.

Ainsi, pour de telles situations, je suggère d'écrire un petit script d'assistance qui appelle les commandes et redirige la sortie vers un fichier journal temporaire. Il peut suivre en interne l'état de sortie de tous les programmes et si l'un est !=0, il peut :

  • transfert le fichier journal sur stdout
  • envoyez-le via un outil de messagerie en ligne de commande
  • ou simplement produire des diagnostics courts qui incluent l'emplacement du fichier journal

Quelque chose comme :

$ 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. Comment réparer l'erreur d'échec d'authentification Cron sous Linux ?

  2. Le @reboot de Crontab ne fonctionne que pour Root ?

  3. Erreur SFTP Message reçu trop long

  4. Autorisation refusée lors du clonage du dépôt git

  5. Erreur lors de l'utilisation de l'assistant d'identification Git avec gnome-keyring en tant que Sudo

Erreur d'entrée/sortie gcsfuse

Comment puis-je afficher les résultats de mes tâches cron ?

erreur d'entrée/sortie ubuntu

erreur startx lors de la configuration du serveur X sur archlinux

Interprétation dd Erreur d'entrée/sortie

Erreur lors de la tentative d'utilisation de Xorg :seuls les utilisateurs de la console sont autorisés à exécuter le serveur X ?