Jak wysłać powiadomienie tylko w przypadku, gdy dane wyjściowe zadania nie są puste

12

Używamy narzędzia Rundeck do skanowania plików dziennika w poszukiwaniu usługi i podejmujemy działania w zależności od tego, co się tam znajduje. Zasadniczo dla każdego znalezionego elementu, dla którego nie istnieją rekordy, inicjowane jest repozytorium git i wywoływanych jest kilka punktów końcowych odpoczynku, ale nie o to chodzi.

Konfigurujemy zadanie do uruchomienia zgodnie z planem, powiedzmy co kilka godzin, i do wysyłania powiadomień o niepowodzeniach, a dodatkowo do wysyłania powiadomień o sukcesach tylko wtedy, gdy zostało wykonane co najmniej jedno działanie (tj. Skrypt powłoki we wprowadzonym zadaniu pętla przynajmniej raz). Skrypt jest napisany w taki sposób, że emituje dane wyjściowe na standardowym wyjściu tylko wtedy, gdy zostaną znalezione elementy do wykonania.

Czy jest jakiś sposób na wywołanie powiadomienia o tym wymaganiu? Lub sposób na napisanie skryptu bez pisania wtyczki od zera?

Jednym z możliwych obejść byłoby wyłączenie wyzwalacza powiadomienia o awarii i sprawienie, aby skrypt zwracał wartość niezerową w przypadku braku działań, ale nie czuję się z tym dobrze.

ᴳᵁᴵᴰᴼ
źródło
Czy dane wyjściowe są naprawdę puste, czy mogą mieć jakieś puste wiersze lub znak powrotu karetki?
Tensibai
afaics jest puste, z perspektywy bash; w moim skrypcie jest jeden krok powłoki, nie jestem pewien, czy udekoruję go wydrukiem
2017
Czy wysłanie powiadomienia z samego skryptu byłoby opcją? A więc rundeck powiadamia tylko o niepowodzeniu, a skrypt ma własne powiadomienie „zrobiłem coś”?
Tensibai,
To właściwie dobry pomysł!
ᴳᵁᴵᴰᴼ

Odpowiedzi:

7

Sposób, w jaki mogłem myśleć to:

Pisanie własnej wtyczki ze strony przykładowej wtyczki powiadomienia może być sposobem na dostosowanie przykładowego kodu powiadomienia .

Wyłączanie powiadomień o sukcesie w rundeck i obsługa części powiadomienia o sukcesie w samym skrypcie. W ten sposób Twoim obowiązkiem jest ostrzeżenie skryptu, że zrobił coś w normalnym stanie, i nadal obowiązkiem jest ostrzeżenie, że skrypt nie powiódł się.

Tensibai
źródło
1
Dzięki; kiedy dostajesz funkcję zamkniętą w narzędziu, które masz z przodu, często zdarza się zapominać, że możesz po nią sięgnąć bezpośrednio ...
ᴳᵁᴵᴰᴼ
1

Udało mi się obejść ten problem w nieco podejrzany sposób, zmieniając polecenie na:

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

To przepuszcza wyjście grepi kończy się niepowodzeniem, jeśli w ogóle jest jakieś wyjście, ale grepnadal je przepuszcza, więc nadal możesz zobaczyć wyjście w Rundeck po awarii.

Jedną wadą jest to, że uważam, że tracisz puste wiersze, ale nie wysyłamy żadnych, więc nic wielkiego dla nas, i to nas przewróci, dopóki nie będziemy mogli zaktualizować aplikacji, aby zakończyć z odpowiednim kodem wyjścia.

Malvineous
źródło