[comment]: # translation:outdated

[comment]: # ({b398ca99-d53fbea3})
# 9 Ejecución de comandos

Zabbix utiliza funciones comunes para verificaciones externas, parámetros de usuario, métricas
system.run, scripts de alerta personalizados, comandos remotos y scripts
globales.

[comment]: # ({/b398ca99-d53fbea3})

[comment]: # ({2e61fefc-a11705f0})
#### Pasos de ejecución

:::noteclassic
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.

::: noteimportant
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.

[comment]: # ({/2e61fefc-a11705f0})

[comment]: # ({662ce081-ddd381e9})
#### 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](/manual/appendix/config/zabbix_agentd) 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).

[comment]: # ({/662ce081-ddd381e9})

[comment]: # ({c891e9ab-35a7f666})
#### Ver también

- [Comprobaciones externas](/manual/config/items/itemtypes/external#external_check_result)
- [Parámetros de usuario](/manual/config/items/userparameters)
- Métricas [system.run](/manual/config/items/itemtypes/zabbix_agent)
- [Scripts de alerta personalizados](/manual/config/notifications/media/script)
- [Comandos remotos](/manual/config/notifications/action/operation/remote_command)
- [Scripts globales](/manual/web_interface/frontend_sections/alerts/scripts)

[comment]: # ({/c891e9ab-35a7f666})
