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.

Tutti i comandi e gli script vengono eseguiti con i permessi dell'utente del sistema operativo che esegue l'agent Zabbix. L'utente deve disporre di autorizzazioni sufficienti per eseguire il comando o lo script.

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 richiamare tale script durante l'esecuzione del comando.

Il comando o lo script viene eseguito in modo analogo sulle piattaforme Unix e 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. Per il processo figlio viene creato un nuovo gruppo di processi (in Unix) o un job (in Windows).
  5. Zabbix legge dalla pipe fino al verificarsi del timeout o finché nessun processo scrive sull'altro lato (TUTTI gli handle/descrittori di file sono stati chiusi). Si noti che il processo figlio può creare altri processi e terminare prima che questi terminino o chiudano l'handle/descrittore di file.
  6. Se il timeout non è stato raggiunto, Zabbix attende che il processo figlio iniziale termini o che si verifichi il timeout.
  7. Se il processo figlio iniziale termina prima del raggiungimento del timeout, Zabbix controlla il codice di uscita del processo figlio iniziale e lo confronta con 0. Un codice di uscita diverso da zero viene considerato un errore di esecuzione, ma solo per gli script di avviso personalizzati, i comandi remoti e gli script utente eseguiti sul server Zabbix o sul proxy Zabbix.
  8. A questo punto si presume che tutto sia terminato e che l'intero albero dei processi (ovvero il gruppo di processi o il job) venga terminato.

Zabbix considera completata l'elaborazione di un comando/script quando il processo figlio iniziale è terminato E nessun altro processo mantiene ancora aperto l'handle/descrittore di output. Al termine dell'elaborazione, TUTTI i processi creati vengono terminati.

Tutte le virgolette doppie e le barre rovesciate presenti nel comando vengono precedute da barre rovesciate e il comando viene racchiuso tra virgolette doppie.

Verifica del codice di uscita

Il codice di uscita viene verificato in base alle seguenti condizioni:

  • Solo per gli script di avviso personalizzati, i comandi remoti e gli script utente eseguiti sul server Zabbix e sul proxy Zabbix.
  • Qualsiasi codice di uscita diverso da 0 viene considerato un errore di esecuzione.
  • Il contenuto dell'errore standard e dell'output standard delle 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 sull'agent/proxy Zabbix abilitando il parametro LogRemoteCommands sull'agent/proxy.

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

  • Il contenuto dell'errore standard e dell'output standard delle esecuzioni non riuscite (se presente).
  • Process exited with code: N. (per output vuoto e codice di uscita diverso da 0).
  • Process killed by signal: N. (per processi terminati da un segnale, solo su Linux).
  • Process terminated unexpectedly. (per processi terminati per motivi sconosciuti).

Vedi anche