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

10 Exécution de commande

Zabbix utilise des fonctionnalités communes pour les vérifications externes, les paramètres utilisateur, les éléments system.run, les scripts d'alerte personnalisés, les commandes à distance et les scripts utilisateur.

Étapes d'exécution

La commande/script est exécutée de manière similaire sur les plates-formes Unix et Windows :

  1. Zabbix (le processus parent) crée un canal de communication
  2. Zabbix définit le canal comme sortie du processus enfant à créer
  3. Zabbix crée le processus enfant (exécute la commande/script)
  4. Un nouveau groupe de processus (sous Unix) ou un job (sous Windows) est créé pour le processus enfant.
  5. Zabbix lit depuis le canal jusqu’à expiration du délai ou jusqu’à ce que personne n’écrive à l’autre extrémité (TOUS les descripteurs/descripteurs de fichiers ont été fermés). Notez que le processus enfant peut créer plusieurs processus et se terminer avant qu'ils ne quittent ou ne ferment le descripteur/descripteur de fichier.
  6. Si le délai d'attente n'a pas été atteint, Zabbix attend que le processus enfant initial se termine ou que le délai d'attente se soit écoulé.
  7. Si le processus enfant initial s'est terminé et que le délai n'a pas été dépassé, Zabbix vérifie le code de sortie du processus enfant initial et le compare à 0 (une valeur non nulle est considérée comme un échec d'exécution, uniquement pour les scripts d'alerte personnalisés, les commandes à distances et les scripts utilisateurs exécutés sur le serveur Zabbix et le proxy Zabbix)
  8. À ce stade, on suppose que tout est terminé et que tout l’arbre de processus (c’est-à-dire le groupe de processus ou le job) est terminé.

Zabbix suppose qu'une commande/script a été traité lorsque le processus enfant initial s'est terminé ET qu'aucun autre processus ne conserve toujours le descripteur de sortie/descripteur de fichier ouvert. Lorsque le traitement est terminé, TOUS les processus créés sont terminés.

Touts les guillemets doubles et les barres obliques inverses de la commande sont échappés avec des barres obliques inverses et la commande est placée entre guillemets.

Vérification du code de sortie

Les codes de sortie sont vérifiés avec les conditions suivantes :

  • Uniquement pour les scripts d'alerte personnalisés, les commandes à distance et les scripts utilisateur exécutés sur le serveur Zabbix et le proxy Zabbix.
  • Tout code de sortie différent de 0 est considéré comme un échec d'exécution.
  • Le contenu de l'erreur standard et de la sortie standard pour les exécutions ayant échoué est collecté et disponible dans l'interface (où le résultat de l'exécution est affiché).
  • Une entrée de journal supplémentaire est créée pour les commandes à distance sur le serveur Zabbix afin de sauvegarder les résultats de l'exécution du script. Elle peut être activée à l'aide du paramètre d'agent LogRemoteCommands.

Messages possibles de l'interface web et entrées du journal pour les commandes/scripts ayant échouées :

  • Contenu de l'erreur standard et de la sortie standard pour les exécutions ayant échoué (le cas échéant).
  • "Process exited with code: N." (pour une sortie vide et un code de sortie différent de 0).
  • "Process killed by signal: N." (pour le processus terminé par un signal, sous Linux uniquement).
  • "Process terminated unexpectedly." (pour le processus s'est arrêté pour des raisons inconnues).

En savoir plus sur :

See also