9 Wykonywanie poleceń
Zabbix używa wspólnej funkcjonalności dla kontroli zewnętrznych, parametrów użytkownika, pozycji system.run, niestandardowych skryptów alertów, zdalnych poleceń i globalnych skryptów.
Kroki wykonywania
Domyślnie wszystkie skrypty w Zabbix są wykonywane przy użyciu powłoki sh i nie ma możliwości zmiany domyślnej powłoki. Aby użyć innej powłoki, można zastosować obejście: utworzyć plik skryptu i wywołać 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)
- Dla procesu potomnego tworzona jest nowa grupa procesów (w Unix) lub zadanie (w Windows)
- Zabbix odczytuje z potoku do momentu wystąpienia limitu czasu lub gdy nikt nie zapisuje do drugiego końca (WSZYSTKIE uchwyty/deskriptory plików zostały zamknięte). Należy pamiętać, że proces potomny może utworzyć więcej procesów i zakończyć działanie, zanim one zakończą działanie lub zamkną uchwyt/deskrpytor pliku.
- Jeśli limit czasu nie został osiągnięty, Zabbix czeka, aż początkowy proces potomny zakończy działanie lub wystąpi limit czasu
- Jeśli początkowy proces potomny zakończył działanie i limit czasu nie został osiągnięty, Zabbix sprawdza kod wyjścia początkowego procesu potomnego i porównuje go z 0 (wartość różna od zera jest uznawana za błąd wykonania, tylko dla niestandardowych skryptów alertów, zdalnych poleceń i skryptów użytkownika wykonywanych na serwer i proxy Zabbix)
- Na tym etapie zakłada się, że wszystko zostało wykonane i całe drzewo procesów (tj. grupa procesów lub zadanie) jest kończone
Zabbix zakłada, że polecenie/skrypt zakończyło przetwarzanie, gdy początkowy proces potomny zakończył działanie ORAZ żaden inny proces nie utrzymuje już otwartego uchwytu wyjściowego/deskriptora pliku. Gdy przetwarzanie zostanie zakończone, WSZYSTKIE utworzone procesy są kończone.
Wszystkie podwójne cudzysłowy i ukośniki odwrotne w poleceniu są poprzedzane ukośnikami odwrotnymi, a polecenie jest ujmowane w podwójne cudzysłowy.
Sprawdzanie kodu wyjścia
Kody wyjścia są sprawdzane przy następujących warunkach:
- Tylko dla niestandardowych skryptów alertów, zdalnych poleceń i skryptów użytkownika wykonywanych na serwer Zabbix i proxy Zabbix.
- Każdy kod wyjścia różny od 0 jest uznawany za błąd wykonania.
- Zawartość standardowego strumienia błędów i standardowego wyjścia dla nieudanych wykonań jest zbierana i dostępna we frontendzie (gdzie wynik wykonania jest wyświetlany).
- Dodatkowy wpis w logu może zostać utworzony dla zdalnych poleceń wykonywanych na Zabbix agent/proxy po włączeniu parametru LogRemoteCommands w agent/proxy.
Możliwe komunikaty we frontendzie i wpisy w logu dla nieudanych poleceń/skryptów:
- Zawartość standardowego strumienia błędów i standardowego wyjścia dla nieudanych wykonań (jeśli występuje).
- "Proces zakończył działanie z kodem: N." (dla pustego wyjścia i kodu wyjścia różnego od 0).
- "Proces został zakończony sygnałem: N." (dla procesu zakończonego sygnałem, tylko w systemie Linux).
- "Proces został nieoczekiwanie zakończony." (dla procesu zakończonego z nieznanych przyczyn).