9 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

Par défaut, tous les scripts dans Zabbix sont exécutés à l'aide du shell sh, il n'est pas possible de modifier le shell par défaut. Pour utiliser un autre shell, vous pouvez utiliser une solution de contournement : créez un fichier script et appelez ce script pendant l'exécution de la commande.

La commande/le script est exécuté de la même manière sur les plates-formes Unix et Windows :

  1. Zabbix (le processus parent) crée un canal pour la communication
  2. Zabbix définit le canal comme sortie pour le processus enfant à créer
  3. Zabbix crée le processus enfant (exécute la commande/le script)
  4. Un nouveau groupe de processus (sous Unix) ou une tâche (sous Windows) est créé pour le processus enfant
  5. Zabbix lit à partir du canal jusqu'à ce que le délai d'attente se produise ou que personne n'écrive à l'autre extrémité (TOUS les handles/descripteurs de fichiers ont été fermés). Notez que le processus enfant peut créer plus de processus et quitter avant qu'ils ne quittent ou ne ferment le handle/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 produise
  7. Si le processus enfant initial s'est terminé et que le délai d'attente n'a pas été atteint, Zabbix vérifie le code de sortie du processus enfant initial et le compare à 0 (une valeur différente de zéro est considérée comme un échec d'exécution, uniquement pour les scripts d'alerte personnalisés, les commandes distantes et les scripts utilisateur exécutés sur le serveur Zabbix et le proxy Zabbix)
  8. À ce stade, il est supposé que tout est terminé et que l'ensemble de l'arborescence des processus (c'est-à-dire le groupe de processus ou le travail) est terminé

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

Tous les guillemets doubles et les barres obliques inverses de la commande sont échappés avec des barres obliques inverses et la commande est entourée de guillemets doubles.

Vérification du code de sortie

Les codes de sortie sont vérifiés selon 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 la sortie d'erreur standard et de la sortie standard pour les exécutions échouées est collecté et disponible dans l'interface (où le résultat de l'exécution est affiché).
  • Une entrée de journal supplémentaire peut être créée pour les commandes à distance exécutées sur Zabbix agent/proxy en activant le paramètre LogRemoteCommands sur agent/proxy.

Messages possibles dans l'interface et entrées de journal pour les commandes/scripts en échec :

  • Le contenu de la sortie d'erreur standard et de la sortie standard pour les exécutions échouées (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 un processus terminé par un signal, sous Linux uniquement).
  • "Process terminated unexpectedly." (pour un processus terminé pour des raisons inconnues).

Voir aussi