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 plataformas Unix como en Windows:

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

Zabbix asume que un comando/secuencia de comandos ha terminado su procesamiento cuando el proceso hijo inicial ha salido Y ningún otro proceso aún mantiene abierto el identificador de salida/descriptor de archivo. Cuando se realiza el procesamiento, TODOS los procesos creados se terminan.

Todas las comillas dobles y barras invertidas en el comando se escapan con barras invertidas y el comando está 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 se considera ejecución fallida.
  • El contenido del error estándar y la salida estándar para ejecuciones fallidas se recopila y está disponible en la interfaz (donde el resultado de la ejecución es desplegado).
  • 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 la interfaz y entradas de registro para comandos/scripts fallidos:

  • Contenido de error estándar y salida estándar para ejecuciones fallidas. (Si alguna).
  • "Proceso ha salido con código: N." (para salida vacía y código de salida no igual a 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).

Leer más sobre:

Ver también