Comment envoyer une notification uniquement si la sortie du travail n'est pas vide

12

Nous utilisons rundeck pour analyser les fichiers journaux pour un service et prenons des mesures en fonction de ce qui s'y trouve. Fondamentalement, pour chaque élément trouvé, pour lequel aucun enregistrement n'existe, un référentiel git est initialisé et quelques points de terminaison de repos sont appelés, mais ce n'est pas le point.

Nous configurons le travail pour qu'il s'exécute comme prévu, disons toutes les deux heures, et pour envoyer une notification en cas d'échec, et en outre pour envoyer une notification en cas de succès uniquement lorsqu'au moins une action a été effectuée (c'est-à-dire le script shell dans la tâche entrée boucle au moins une fois). Le script est écrit de sorte qu'il n'émette une sortie sur stdout que lorsque les éléments à traiter sont trouvés.

Existe-t-il un moyen de déclencher une notification avec cette exigence? Ou un moyen de l'écrire sans écrire un plugin à partir de zéro?

Une solution de contournement possible serait de désactiver le déclencheur de notification d'échec et de faire en sorte que le script retourne différent de zéro en cas de non-action, mais je ne suis pas à l'aise de le faire.

ᴳᵁᴵᴰᴼ
la source
La sortie est-elle vraiment vide, ou pourrait-elle avoir des lignes blanches ou un retour chariot?
Tensibai
afaics c'est vide, d'un point de vue bash; il y a une seule étape de shell avec mon script, je ne suis pas sûr que je le décorerais avec une sortie autour
ᴳᵁᴵᴰᴼ
L'envoi de la notification à partir du script lui-même serait-il une option? Et donc le rundeck ne notifie qu'en cas d'échec et le script fait sa propre notification "J'ai fait quelque chose"?
Tensibai
C'est en fait une bonne idée!
ᴳᵁᴵᴰᴼ

Réponses:

7

La façon dont je pouvais penser sont:

Écrire votre propre plugin, à partir de la page d'exemple du plugin de notification , adapter l' exemple de code de notification par courrier électronique pourrait être un moyen.

Désactiver les notifications de réussite dans rundeck et gérer la partie de notification de réussite dans votre script lui-même. De cette façon, c'est la responsabilité de votre script d'avertir qu'il a fait quelque chose dans un état normal et c'est toujours la responsabilité de vous avertir que le script a échoué.

Tensibai
la source
1
Merci; lorsque vous obtenez une fonctionnalité enveloppée par l'outil que vous avez en face, il est si fréquent d'oublier parfois que vous pouvez y aller directement ....
ᴳᵁᴵᴰᴼ
1

J'ai pu contourner ce problème de manière un peu douteuse en changeant la commande en:

/bin/bash -c "your-command-here | { ! grep '^'; }"

Cela conduit la sortie à travers grepet échoue s'il y a une sortie du tout, mais la greptransmet toujours afin que vous puissiez toujours voir la sortie dans Rundeck en cas d'échec.

Un inconvénient est que je crois que vous perdez toutes les lignes vierges mais que nous n'en produisons pas, ce n'est donc pas un gros problème pour nous, et cela nous attendra jusqu'à ce que nous puissions mettre à jour l'application pour terminer avec un code de sortie approprié.

Malvineous
la source