Sidebar

Zabbix Summit 2022
Register for Zabbix Summit 2022

10 Execução de comandos

O Zabbix usa uma funcionalidade em comum para executar parâmetros de usuários, comandos remotos, system.run[] sem a flag "nowait", scripts (alerta, externos e globais) e outros comandos internos.

O comando/script é executado de forma similar nas plataformas UNIX e Windows:

  1. Zabbix (um de seus processos) cria uma ponte para comunicação
  2. Zabbix configura a pote como a saída para o processo a ser criado
  3. Zabbix cria o processo filho (executa o comando/script)
  4. Um novo grupo de processos (no Unix) ou um 'job' (no Windows) é criado para os processos filhos
  5. O Zabbix lê do 'pipe' até que o 'timeout' seja alcançado ou que ninguém esteja mais gravando nele (Todos os gerenciadores/descritores de arquivo tiverem sido fechados). Observe que o processo filho pode criar mais processos e sair antes de ter saido ou fechado o descritor de arquivo.
  6. Se o tempo limite não tiver sido alcançado o Zabbix aguarda até que o processo saia ou que o timeout ocorra
  7. Neste ponto nós estamos assumindo que tudo foi executado com sucesso e toda a árvore de processos foi terminada

Os passos 5-7 não se referem a comandos remotos executados com a flag "nowait".

O Zabbix entende que o comando/script foi concluido quando o processo inicial é finalizado E não existe outro processo que continue gerenciando os descritores de arquivos abertos. Quando o processamento é concluído todos os processos que foram criados são terminados.

Todas as aspas duplas e contrabarras no comando serão escapadas com contrabarras e o comando será executado entre aspas duplas.

Leia mais sobre isso nos manuais de parâmetros de usuário, comandos remotos, scripts de alerta.

Etapas de execução

O comando/script é executado de forma semelhante no Unix e no Windows plataformas:

  1. Zabbix (o processo pai) cria um canal para comunicação
  2. Zabbix define o pipe como saída para o filho a ser criado processar
  3. Zabbix cria o processo filho (executa o comando/script)
  4. Um novo grupo de processos (no Unix) ou um trabalho (no Windows) é criado para o processo filho
  5. Zabbix lê do pipe até que o tempo limite ocorra ou ninguém esteja escrevendo para a outra extremidade (TODOS os identificadores/descritores de arquivo foram fechados). Observe que o processo filho pode criar mais processos e sair antes de sair ou fechar o descritor de identificador/arquivo.
  6. Se o tempo limite não for atingido, o Zabbix espera até que o o processo filho é encerrado ou ocorre o tempo limite
  7. Se o processo filho inicial foi encerrado e o tempo limite não foi alcançado, o Zabbix verifica o código de saída do processo filho inicial e compara com 0 (valor diferente de zero é considerado como falha de execução, apenas para scripts de alerta personalizados, comandos remotos e scripts de usuário executado no servidor Zabbix e proxy Zabbix)
  8. Neste ponto, assume-se que tudo está feito e todo o árvore de processos (ou seja, o grupo de processos ou o trabalho) é encerrado

::: não importante O Zabbix assume que um comando/script foi feito processamento quando o processo filho inicial saiu E nenhum outro processo ainda está mantendo o identificador de saída/descritor de arquivo aberto. Quando processamento é feito, TODOS os processos criados são finalizados. :::

Todas as aspas duplas e barras invertidas no comando são escapadas com barras invertidas e o comando é colocado entre aspas duplas.

Verificação de código de saída

O código de saída é verificado com as seguintes condições:

  • Apenas para scripts de alerta personalizados, comandos remotos e scripts de usuário executado no servidor Zabbix e no proxy Zabbix.
  • Qualquer código de saída diferente de 0 é considerado como execução falha.
  • Conteúdo de erro padrão e saída padrão para execuções com falha são coletados e disponibilizados no frontend (onde o resultado da execução é exibido).
  • Entrada de log adicional é criada para comandos remotos no servidor Zabbix para salvar a saída de execução do script e pode ser ativado usando Agente LogRemoteCommands parâmetro.

Possíveis mensagens de front-end e entradas de log para comandos/scripts com falha:

  • Conteúdo de erro padrão e saída padrão para execuções com falha (caso existam).
  • "Processo encerrado com código: N." (para saída vazia e código de saída não igual a 0).
  • "Processo encerrado por sinal: N." (para processo terminado por um sinal, somente no Linux).
  • "Processo finalizado inesperadamente." (para processo encerrado por razões desconhecidas).

Leia mais sobre: