10 Wykonywanie poleceń

Zabbix wykorzystuje wspólne funkcje do zewnętrznych sprawdzeń, parametrów użytkownika, elementów system.run, niestandardowych skryptów alertów, poleceń zdalnych i globalnych skryptów.

Kroki wykonania

Domyślnie wszystkie skrypty w Zabbix są wykonywane za pomocą powłoki sh, i niemożliwe jest zmodyfikowanie domyślnej powłoki. Aby skorzystać z innej powłoki, możesz użyć obejścia: utwórz plik ze skryptem i wywołaj ten skrypt podczas wykonywania polecenia.

Polecenie/skrypt jest wykonywane w podobny sposób zarówno na platformach Unix, jak i Windows:

  1. Zabbix (proces nadrzędny) tworzy potok do komunikacji
  2. Zabbix ustawia potok jako wyjście dla tworzonego procesu potomnego
  3. Zabbix tworzy proces potomny (uruchamia polecenie/skrypt)
  4. Tworzona jest nowa grupa procesów (w Unixie) lub zadanie (w systemie Windows) dla procesu potomnego
  5. Zabbix czyta z potoku do momentu wystąpienia limitu czasowego lub braku zapisów na drugim końcu (WSZYSTKIE uchwyty/desktyptory plików zostały zamknięte). Zauważ, że proces potomny może tworzyć więcej procesów i zakończyć działanie przed ich zakończeniem lub zamknięciem uchwytu/deskyptorów pliku.
  6. Jeśli limit czasowy nie został osiągnięty, Zabbix czeka, aż początkowy proces potomny zakończy działanie lub upłynie limit czasowy
  7. Jeśli początkowy proces potomny zakończył działanie, a limit czasowy nie został osiągnięty, Zabbix sprawdza kod wyjścia początkowego procesu potomnego i porównuje go z 0 (wartość niezerowa jest uważana za niepowodzenie wykonania, tylko dla niestandardowych skryptów alertów, poleceń zdalnych i skryptów użytkownika wykonywanych na serwerze Zabbix i na proxy Zabbix)
  8. W tym momencie zakłada się, że wszystko zostało zakończone, a całe drzewo procesów (tj. grupa procesów lub zadanie) jest zamykane

Zabbix zakłada, że polecenie/skrypt zostało zakończone, gdy początkowy proces potomny został zakończony I żaden inny proces nie trzyma nadal otwartego uchwytu/deskryptora pliku wyjściowego. Gdy przetwarzanie zostanie zakończone, WSZYSTKIE utworzone procesy są zamykane.

Wszystkie podwójne cudzysłowy i ukośniki w poleceniu są poprzedzone ukośnikami i polecenie jest umieszczone w podwójnych cudzysłowach.

Sprawdzanie kodu wyjścia

Kod wyjścia jest sprawdzany zgodnie z następującymi warunkami:

  • Tylko dla niestandardowych skryptów alertów, poleceń zdalnych i skryptów użytkownika wykonywanych na serwerze Zabbix i na proxy Zabbix.
  • Każdy kod wyjścia różny od 0 jest uważany za niepowodzenie wykonania.
  • Zawartość standardowego błędu i standardowego wyjścia dla nieudanych wykonań jest gromadzona i dostępna w interfejsie (gdzie jest wyświetlony wynik wykonania).
  • Dodatkowy wpis logu jest tworzony dla poleceń zdalnych na serwerze Zabbix, aby zapisać wynik wykonania skryptu i można go włączyć za pomocą parametru LogRemoteCommands agenta.

Możliwe komunikaty w interfejsie i wpisy dziennika dla nieudanych poleceń/skryptów:

  • Zawartość standardowego błędu i standardowego wyjścia dla nieudanych wykonan (jeśli występują).
  • "Proces zakończony kodem: N." (dla pustego wyjścia i kodu wyjścia różnego od 0).
  • "Proces zatrzymany przez sygnał: N." (dla procesu zatrzymanego przez sygnał, tylko na systemach Linux).
  • "Proces zakończony niespodziewanie." (dla procesu zakończonego z nieznanych przyczyn).

Zobacz także