Você está visualizando a documentação da versão de desenvolvimento, que pode estar incompleta.
Esta página foi traduzida automaticamente. Se você notar um erro, selecione-o e pressione Ctrl+Enter para reportá-lo aos editores.

9 Execução de comandos

O Zabbix utiliza funcionalidades comuns para verificações externas, parâmetros de usuário, itens system.run, scripts de alerta personalizados, comandos remotos e scripts globais.

Etapas de execução

Por padrão, todos os scripts no Zabbix são executados usando o shell sh, e não é possível modificar o shell padrão. Para utilizar um shell diferente, você pode empregar uma solução alternativa: criar um arquivo de script e invocar esse script durante a execução do comando.

O comando/script é executado de forma semelhante em ambas as plataformas, Unix e Windows:

  1. O Zabbix (o processo pai) cria um pipe para comunicação
  2. O Zabbix define o pipe como a saída para o processo filho a ser criado
  3. O Zabbix cria o processo filho (executa o comando/script)
  4. Um novo grupo de processos (em Unix) ou um job (em Windows) é criado para o processo filho
  5. O Zabbix lê do pipe até que ocorra o timeout ou ninguém esteja escrevendo na outra extremidade (TODOS os handles/descritores de arquivo foram fechados). Observe que o processo filho pode criar mais processos e sair antes que eles saiam ou fechem o handle/descritor de arquivo.
  6. Se o timeout não foi atingido, o Zabbix espera até que o processo filho inicial saia ou ocorra o timeout
  7. Se o processo filho inicial saiu e o timeout não foi atingido, o Zabbix verifica o código de saída do processo filho inicial e o 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 executados no Zabbix server e Zabbix proxy)
  8. Neste ponto, assume-se que tudo foi feito e toda a árvore de processos (ou seja, o grupo de processos ou o job) é terminada

O Zabbix assume que um comando/script terminou o processamento quando o processo filho inicial saiu E nenhum outro processo ainda está mantendo o handle/descritor de arquivo de saída aberto. Quando o processamento é concluído, TODOS os processos criados são terminados.

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

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

Os códigos de saída são verificados com as seguintes condições:

  • Apenas para scripts de alerta personalizados, comandos remotos e scripts de usuário executados no Zabbix server e no Zabbix proxy.
  • Qualquer código de saída diferente de 0 é considerado como falha na execução.
  • O conteúdo do erro padrão e da saída padrão para execuções com falha é coletado e está disponível no frontend (onde o resultado da execução é exibido).
  • Uma entrada de log adicional pode ser criada para comandos remotos executados no Zabbix agent/proxy ativando o parâmetro LogRemoteCommands no agent/proxy.

Possíveis mensagens do frontend e entradas de log para comandos/scripts com falha:

  • Conteúdo do erro padrão e da saída padrão para execuções com falha (se houver).
  • "Process exited with code: N." (para saída vazia e código de saída diferente de 0).
  • "Process killed by signal: N." (para processo terminado por um sinal, apenas no Linux).
  • "Process terminated unexpectedly." (para processo terminado por razões desconhecidas).

Veja também