Wykonywanie poleceń

Zabbix korzysta ze wspólnych funkcji na potrzeby kontroli zewnętrznych, parametrów użytkownika, pozycji system.run, niestandardowych skryptów alertów, poleceń zdalnych i skryptów globalnych.

Wszystkie polecenia i skrypty są wykonywane z uprawnieniami użytkownika systemu operacyjnego, który uruchamia agenta Zabbix. Użytkownik musi mieć wystarczające uprawnienia do wykonania polecenia lub skryptu.

Kroki wykonywania

Domyślnie wszystkie skrypty w Zabbix są wykonywane przy użyciu powłoki sh i nie można zmienić 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 lub skrypt jest wykonywane w podobny sposób na platformach Unix i Windows:

  1. Zabbix (proces nadrzędny) tworzy potok do komunikacji.
  2. Zabbix ustawia potok jako wyjście dla procesu potomnego, który ma zostać utworzony.
  3. Zabbix tworzy proces potomny (uruchamia polecenie/skrypt).
  4. Dla procesu potomnego tworzona jest nowa grupa procesów (w systemie Unix) lub zadanie (w systemie Windows).
  5. Zabbix odczytuje dane z potoku do momentu wystąpienia limitu czasu lub gdy nikt nie zapisuje na drugim końcu (WSZYSTKIE uchwyty/deskryptory plików zostaną zamknięte). Należy pamiętać, że proces potomny może utworzyć więcej procesów i zakończyć działanie, zanim te procesy zakończą działanie lub zamkną uchwyt/deskryptor pliku.
  6. 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.
  7. Jeśli początkowy proces potomny zakończy działanie przed osiągnięciem limitu czasu, Zabbix sprawdza kod zakończenia początkowego procesu potomnego i porównuje go z 0. Niezerowy kod zakończenia jest uznawany za błąd wykonania, ale tylko w przypadku niestandardowych skryptów alarmowych, zdalnych poleceń i skryptów użytkownika wykonywanych na serwerze Zabbix lub 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) zostaje zakończone.

Zabbix zakłada, że przetwarzanie polecenia/skryptu zostało zakończone, gdy początkowy proces potomny zakończył działanie ORAZ żaden inny proces nadal nie utrzymuje otwartego uchwytu/deskryptora pliku wyjściowego. Po zakończeniu przetwarzania WSZYSTKIE utworzone procesy zostają zakończone.

Wszystkie cudzysłowy i ukośniki odwrotne w poleceniu są poprzedzane ukośnikami odwrotnymi, a polecenie jest ujmowane w cudzysłowy.

Sprawdzanie kodu wyjścia

Kod wyjścia jest sprawdzany w następujących przypadkach:

  • Tylko w przypadku niestandardowych skryptów alertów, zdalnych poleceń i skryptów użytkownika wykonywanych na serwerze 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 strumienia wyjścia dla nieudanych wykonań jest zbierana i dostępna we frontendzie (w miejscu wyświetlania wyniku wykonania).
  • Dodatkowy wpis w dzienniku może zostać utworzony dla zdalnych poleceń wykonywanych na agencie/proxy Zabbix po włączeniu parametru LogRemoteCommands na agencie/proxy.

Możliwe komunikaty we frontendzie i wpisy w dzienniku dotyczące nieudanych poleceń lub skryptów:

  • Zawartość standardowego strumienia błędów i standardowego strumienia wyjścia dla nieudanych wykonań (jeśli istnieje).
  • Process exited with code: N. (dla pustego wyjścia i kodu wyjścia różnego od 0).
  • Process killed by signal: N. (dla procesu zakończonego przez sygnał, tylko w systemie Linux).
  • Process terminated unexpectedly. (dla procesu zakończonego z nieznanych przyczyn).

Zobacz także