9 Esecuzione dei comandi

Zabbix utilizza funzionalità comuni per i controlli esterni, i parametri utente, gli item system.run, gli script di avviso personalizzati, i comandi remoti e gli script globali.

Fasi di esecuzione

Per impostazione predefinita, tutti gli script in Zabbix vengono eseguiti utilizzando la shell sh, e non è possibile modificare la shell predefinita. Per utilizzare una shell diversa, è possibile adottare una soluzione alternativa: creare un file di script e richiamarlo durante l'esecuzione del comando.

Il comando/script viene eseguito in modo simile sia sulle piattaforme Unix che Windows:

  1. Zabbix (il processo padre) crea una pipe per la comunicazione
  2. Zabbix imposta la pipe come output per il processo figlio da creare
  3. Zabbix crea il processo figlio (esegue il comando/script)
  4. Viene creato un nuovo gruppo di processi (in Unix) o un job (in Windows) per il processo figlio
  5. Zabbix legge dalla pipe finché non si verifica il timeout oppure finché nessuno scrive più all'altra estremità (TUTTI gli handle/file descriptor sono stati chiusi). Si noti che il processo figlio può creare altri processi e terminare prima che questi terminino o chiudano l'handle/file descriptor.
  6. Se il timeout non è stato raggiunto, Zabbix attende finché il processo figlio iniziale non termina oppure finché non si verifica il timeout
  7. Se il processo figlio iniziale è terminato e il timeout non è stato raggiunto, Zabbix controlla il codice di uscita del processo figlio iniziale e lo confronta con 0 (un valore diverso da zero è considerato un errore di esecuzione, solo per gli script di avviso personalizzati, i comandi remoti e gli script utente eseguiti su Zabbix server e Zabbix proxy)
  8. A questo punto si presume che tutto sia stato completato e l'intero albero dei processi (cioè il gruppo di processi o il job) viene terminato

Zabbix presume che un comando/script abbia completato l'elaborazione quando il processo figlio iniziale è terminato E nessun altro processo mantiene ancora aperto l'handle/file descriptor di output. Quando l'elaborazione è completata, TUTTI i processi creati vengono terminati.

Tutte le virgolette doppie e le barre rovesciate nel comando vengono precedute da una barra rovesciata di escape e il comando viene racchiuso tra virgolette doppie.

Controllo del codice di uscita

I codici di uscita vengono controllati secondo le seguenti condizioni:

  • Solo per script di avviso personalizzati, comandi remoti e script utente eseguiti su Zabbix server e Zabbix proxy.
  • Qualsiasi codice di uscita diverso da 0 è considerato un errore di esecuzione.
  • Il contenuto dell'errore standard e dell'output standard per le esecuzioni non riuscite viene raccolto ed è disponibile nel frontend (dove viene visualizzato il risultato dell'esecuzione).
  • È possibile creare una voce di log aggiuntiva per i comandi remoti eseguiti su Zabbix agent/proxy abilitando il parametro LogRemoteCommands su agent/proxy.

Possibili messaggi nel frontend e voci di log per comandi/script non riusciti:

  • Contenuto dell'errore standard e dell'output standard per le esecuzioni non riuscite (se presente).
  • "Il processo è terminato con il codice: N." (per output vuoto e codice di uscita diverso da 0).
  • "Il processo è stato terminato dal segnale: N." (per processi terminati da un segnale, solo su Linux).
  • "Il processo è terminato in modo imprevisto." (per processi terminati per motivi sconosciuti).

Vedi anche