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 z uwzględnieniem następujących warunków:
- Tylko dla niestandardowych skryptów alertów, zdalnych poleceń i skryptów użytkownika wykonywanych na serwerze Zabbix i proxy Zabbix.
- Każdy kod wyjścia inny niż 0 jest uznawany za niepowodzenie wykonania.
- Zawartość standardowego błędu i standardowego wyjścia dla nieudanych wykonań jest zbierana i dostępna w frontend (gdzie wyświetlany jest wynik wykonania).
- Dodatkowy wpis w logu może zostać utworzony dla zdalnych poleceń wykonywanych na agent/proxy Zabbix przez włączenie parametru LogRemoteCommands na agent/proxy.
Możliwe komunikaty frontend i wpisy w logu dla nieudanych poleceń/skryptów:
- Zawartość standardowego błędu i standardowego wyjścia dla nieudanych wykonań (jeśli występuje).
- "Process exited with code: N." (dla pustego wyjścia i kodu wyjścia różnego od 0).
- "Process killed by signal: N." (gdy proces został zakończony sygnałem, tylko w systemie Linux).
- "Process terminated unexpectedly." (gdy proces zakończył się z nieznanych przyczyn).