5 votes

notification de launchd en cas de sortie anormale

J'ai un plist de travail launchd qui exécute un simple shell script qui invoque rdiff-backup pour sauvegarder un répertoire distant par SSH sur mon ordinateur. Le job s'exécute toutes les heures et cela fonctionne bien.

Sauf que l'autre jour, il y a eu une panne de courant* et le travail de rdiff-backup a été interrompu. La fois suivante où launchd a exécuté le script, rdiff-backup a échoué et a enregistré son échec dans le chemin spécifié dans le plist. launchd, remarquant le code de sortie anormal, a cessé d'essayer d'exécuter le script.

Et je n'en avais aucune idée pendant six jours.

Évidemment, je ne veux pas de notification du code de sortie. chaque au moment où le script se termine. Que puis-je faire pour être notifié uniquement des sorties anormales ?

(*) Il s'est avéré que la batterie de mon onduleur passait l'autotest lorsqu'elle était invoquée, mais qu'elle n'avait pas la capacité d'alimenter même une charge minimale pendant plus de 3 secondes.

3voto

LiberalArtist Points 315

L'approche traditionnelle, par exemple avec cron consiste à transmettre l'erreur standard à un programme tel que mail qui est assez intelligent pour ne pas t'envoyer de courrier vide. La différence avec launchd, comme vous l'avez découvert, est que le mécanisme de redirection de l'erreur standard donne une valeur StandardErrorPath pour qu'il soit écrit, ce qui n'est pas aussi pratique pour cet objectif que de terminer votre entrée crontab avec | mail … .

Ma solution habituelle consiste à faire en sorte qu'un script enveloppant vérifie l'adresse de l'utilisateur. StandardErrorPath et me prévenir s'il y a un problème. Cela peut faire partie de la même tâche launchd, de sorte que la vérification se fasse avant la prochaine exécution planifiée, ou vous pouvez avoir une tâche séparée qui ne gère que les journaux d'erreurs (peut-être en utilisant une fonction QueueDirectories ).

Je pense que vous pouvez aussi, par exemple, utiliser un tuyau nommé comme le nom de votre travail StandardErrorPath mais je n'ai jamais essayé.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X