This is a translation of the original English documentation page. Help us make it better.

10 Uitvoering van commando's

Zabbix maakt gebruik van gemeenschappelijke functionaliteit voor externe controles, gebruikersparameters, systeemuitvoer items, aangepaste waarschuwingsscripts, externe opdrachten en globale scripts.

Uitvoeringsstappen

Standaard worden alle scripts in Zabbix uitgevoerd met behulp van de sh-shell, en het is niet mogelijk om de standaardshell te wijzigen. Om een andere shell te gebruiken, kunt u een omweg toepassen: maak een scriptbestand en roep dat script aan tijdens de uitvoering van het commando.

Het commando/script wordt op vergelijkbare wijze uitgevoerd op zowel Unix- als Windows-platforms:

  1. Zabbix (het ouderproces) maakt een pijp voor communicatie.
  2. Zabbix stelt de pijp in als de uitvoer voor het te maken kindproces.
  3. Zabbix maakt het kindproces aan (voert het commando/script uit).
  4. Er wordt een nieuwe procesgroep (in Unix) of een taak (in Windows) gemaakt voor het kindproces.
  5. Zabbix leest uit de pijp totdat er een time-out optreedt of er aan de andere kant niet meer wordt geschreven (ALLE handvatten/bestandsdescriptoren zijn gesloten). Merk op dat het kindproces meer processen kan aanmaken en kan afsluiten voordat ze afsluiten of het handvat/bestandsdescriptor sluiten.
  6. Als de time-out niet is bereikt, wacht Zabbix tot het oorspronkelijke kindproces afsluit of er een time-out optreedt.
  7. Als het oorspronkelijke kindproces is afgesloten en de time-out niet is verstreken, controleert Zabbix de afsluitcode van het oorspronkelijke kindproces en vergelijkt deze met 0 (een niet-nulwaarde wordt beschouwd als een uitvoeringsfout, alleen voor aangepaste waarschuwingsscripts, externe opdrachten en gebruikersscripts die worden uitgevoerd op Zabbix-server en Zabbix-proxy).
  8. Op dit punt wordt aangenomen dat alles is voltooid en de gehele procesboom (d.w.z. de procesgroep of de taak) wordt beëindigd.

Zabbix gaat ervan uit dat een commando/script is voltooid wanneer het oorspronkelijke kindproces is afgesloten EN er geen andere processen zijn die het uitvoerhandvat/bestandsdescriptor nog openhouden. Wanneer verwerking is voltooid, worden ALLE aangemaakte processen beëindigd.

Alle dubbele aanhalingstekens en backslashes in het commando zijn geëscaped met backslashes en het commando is ingesloten in dubbele aanhalingstekens.

Controle van exitcodes

Exitcodes worden gecontroleerd met de volgende voorwaarden:

  • Alleen voor aangepaste waarschuwingsscripts, externe opdrachten en gebruikersscripts die worden uitgevoerd op Zabbix-server en Zabbix-proxy.
  • Elke exitcode die afwijkt van 0 wordt beschouwd als een uitvoeringsfout.
  • Inhoud van standaardfout en standaarduitvoer voor mislukte uitvoeringen worden verzameld en zijn beschikbaar in de frontend (waar het uitvoeringsresultaat wordt weergegeven).
  • Er wordt een extra logboekvermelding gemaakt voor externe opdrachten op Zabbix-server om de uitvoer van het script op te slaan, en dit kan worden ingeschakeld met de LogRemoteCommands agent parameter.

Mogelijke frontendberichten en logboekvermeldingen voor mislukte opdrachten/scripts:

  • Inhoud van standaardfout en standaarduitvoer voor mislukte uitvoeringen (indien aanwezig).
  • "Proces is beëindigd met code: N." (voor lege uitvoer, en exitcode niet gelijk aan 0).
  • "Proces beëindigd door signaal: N." (voor proces beëindigd door een signaal, alleen op Linux).
  • "Proces onverwacht beëindigd." (voor proces beëindigd om onbekende redenen).

Lees meer over:

See also