10 Ejecución de comandos

Zabbix usa una funcionalidad común para verificaciones externas, parámetros de usuario, métricas system.run, scripts de alerta personalizados, comandos remotos y scripts globales.

Pasos de ejecución

De forma predeterminada, todos los scripts en Zabbix se ejecutan usando el shell sh, y no es posible modificar el shell predeterminado. Para utilizar un shell diferente, puede emplear una solución alternativa: crear un archivo de secuencia de comandos e invocarlo durante la ejecución del comando.

El comando/script se ejecuta de manera similar tanto en las plataformas Unix como en Windows:

  1. Zabbix (el proceso padre) crea una tubería para la comunicación.
  2. Zabbix establece la tubería como salida para el proceso hijo que se va a crear.
  3. Zabbix crea el proceso hijo (ejecuta el comando/script)
  4. Se crea un nuevo grupo de procesos (en Unix) o un trabajo (en Windows) para el proceso hijo
  5. Zabbix lee desde la tubería hasta que se agota el tiempo de espera o nadie escribe al otro extremo (TODOS los identificadores/descriptores de archivos se han cerrado). Tenga en cuenta que el proceso hijo puede crear más procesos y salir antes de cerrar el identificador/descriptor de archivo o salir de el.
  6. Si no se ha alcanzado el tiempo de espera, Zabbix espera hasta que el proceso hijo inicial sale o se agota el tiempo de espera.
  7. Si el proceso hijo inicial salió y el tiempo de espera no se ha alcanzado, Zabbix verifica el código de salida del proceso hijo inicial y lo compara con 0 (un valor distinto de cero se considera un error de ejecución, sólo para scripts de alerta personalizados, comandos remotos y scripts de usuario ejecutados en el servidor Zabbix y el proxy Zabbix)
  8. En este punto se supone que todo está hecho y el árbol de procesos en su conjunto (es decir, el grupo de procesos o el trabajo) finaliza.

Zabbix asume que un comando/script ha terminado su trabajo cuando el proceso hijo inicial ha salido Y ningún otro proceso aún mantiene abierto el identificador de salida/descriptor de archivo. Una vez finalizado el procesamiento, TODOS los procesos creados finalizan.

Todas las comillas dobles y barras invertidas del comando se escapan con barras invertidas y el comando se encierra entre comillas dobles.

Comprobación del código de salida

El código de salida se verifica con las siguientes condiciones:

  • Sólo para scripts de alerta personalizados, comandos remotos y scripts de usuario ejecutados en el servidor Zabbix y el proxy Zabbix.
  • Cualquier código de salida diferente a 0 indica que la ejecución ha fallado.
  • El contenido de error estándar y salida estándar para ejecuciones fallidas se recopila y está disponible en la interfaz (donde el resultado de la ejecución es mostrado).
  • Se crea una entrada de registro adicional para comandos remotos en el servidor Zabbix para guardar el resultado de la ejecución del script y se puede habilitar usando el parámetro del agente LogRemoteCommands.

Posibles mensajes de interfaz y entradas de registro para comandos/scripts fallidos:

  • Contenido de error estándar y salida estándar para ejecuciones fallidas. (Si hay).
  • "El proceso ha salido con código: N." (para salida vacía y código de salida distinto de 0).
  • "Proceso finalizado por señal: N." (para el proceso terminado por una señal, sólo en Linux).
  • "El proceso finalizó inesperadamente". (para el proceso terminado por razones desconocidas).

Ver también