Sidebar

#10 Opdrachtuitvoering

Zabbix gebruikt gemeenschappelijke functionaliteit voor externe controles, gebruikersparameters, system.run-items, aangepaste waarschuwingsscripts, externe opdrachten en gebruikers scripts.

Uitvoeringsstappen

De opdracht/het script wordt op dezelfde manier uitgevoerd op zowel Unix als Windows platformen:

  1. Zabbix (het bovenliggende proces) creëert een pijp voor communicatie
  2. Zabbix stelt de pijp in als uitvoer voor het aan te maken kind werkwijze
  3. Zabbix maakt het onderliggende proces (voert de opdracht/het script uit)
  4. Er wordt een nieuwe procesgroep (in Unix) of een taak (in Windows) aangemaakt voor het kindproces
  5. Zabbix leest uit de pijp totdat er een time-out optreedt of niemand schrijft naar het andere uiteinde (ALLE handvatten/bestandsbeschrijvingen zijn gesloten). Merk op dat het onderliggende proces meer processen kan maken en afsluiten voordat ze de handle/file-descriptor afsluiten of sluiten.
  6. Als de time-out niet is bereikt, wacht Zabbix tot de initial onderliggende proces wordt afgesloten of er treedt een time-out op
  7. Als het initiële onderliggende proces is afgesloten en de time-out niet is geweest bereikt, controleert Zabbix de afsluitcode van het eerste onderliggende proces en vergelijkt het met 0 (waarde niet-nul wordt beschouwd als uitvoeringsfout, alleen voor aangepaste waarschuwingsscripts, externe opdrachten en gebruikersscripts uitgevoerd op Zabbix-server en Zabbix-proxy)
  8. Op dit punt wordt aangenomen dat alles is gedaan en het geheel procesboom (d.w.z. de procesgroep of de taak) wordt beëindigd

Zabbix gaat ervan uit dat een commando/script heeft gedaan verwerking wanneer het initiële onderliggende proces is afgesloten EN geen ander proces houdt nog steeds de uitvoerhandle/bestandsdescriptor open. Wanneer verwerking is voltooid, worden ALLE aangemaakte processen beëindigd.

Alle dubbele aanhalingstekens en backslashes in de opdracht worden geëscaped met backslashes en het commando staat tussen dubbele aanhalingstekens.

Codecontrole afsluiten

Exit code wordt gecontroleerd met de volgende voorwaarden:

  • Alleen voor aangepaste waarschuwingsscripts, externe opdrachten en gebruikersscripts uitgevoerd op Zabbix-server en Zabbix-proxy.
  • Elke afsluitcode die verschilt van 0 wordt als uitvoering beschouwd mislukking.
  • Inhoud van standaardfout en standaarduitvoer voor mislukte uitvoeringen worden verzameld en beschikbaar in de frontend (waar het uitvoeringsresultaat is weergegeven).
  • Er wordt een extra logboekinvoer gemaakt voor externe opdrachten op de Zabbix-server om uitvoer van scriptuitvoering op te slaan en kan worden ingeschakeld met LogRemoteCommands-agent parameter.

Mogelijke frontend-berichten en logboekvermeldingen voor mislukte opdrachten/scripts:

  • Inhoud van standaardfout en standaarduitvoer voor mislukte uitvoeringen (indien aanwezig).
  • "Proces afgesloten met code: N." (voor lege output, en exit code niet) gelijk aan 0).
  • "Proces gedood door signaal: N." (voor proces dat wordt beëindigd door een signaal, alleen op Linux).
  • "Proces onverwacht beëindigd." (voor proces beëindigd voor onbekende redenen).

Lees meer over: