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:
- Zabbix (proces nadrzędny) tworzy potok do komunikacji
- Zabbix ustawia potok jako wyjście dla tworzonego procesu potomnego
- Zabbix tworzy proces potomny (uruchamia polecenie/skrypt)
- Tworzona jest nowa grupa procesów (w Unixie) lub zadanie (w systemie Windows) dla procesu potomnego
- 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.
- 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
- 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)
- 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).