[comment]: # ({b398ca99-d53fbea3})
# 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.

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

[comment]: # ({2e61fefc-a11705f0})
#### Fasi di esecuzione

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

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

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

[comment]: # ({f466cd79-ddd381e9})
#### Controllo del codice di uscita

I codici di uscita vengono controllati con le seguenti condizioni:

-   Solo per script di allarme 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 di standard error e standard output per le esecuzioni
    non riuscite viene raccolto e reso disponibile nel frontend (dove viene
    visualizzato il risultato dell'esecuzione).
-   Una voce di log aggiuntiva può essere creata per i comandi remoti eseguiti su Zabbix agent/proxy
    abilitando il parametro LogRemoteCommands su [agent](/manual/appendix/config/zabbix_agentd#logremotecommands)/[proxy](/manual/appendix/config/zabbix_proxy#logremotecommands).

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

-   Il contenuto di standard error e standard output per le esecuzioni
    non riuscite (se presente).
-   "Process exited with code: N." (per output vuoto e codice di uscita non
    uguale a 0).
-   "Process killed by signal: N." (per processo terminato da un segnale,
    solo su Linux).
-   "Process terminated unexpectedly." (per processo terminato per
    motivi sconosciuti).

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

[comment]: # ({9bbf0e66-35a7f666})
#### Vedi anche

-   [Controlli esterni](/manual/config/items/itemtypes/external#external-check-result)
-   [Parametri utente](/manual/config/items/userparameters)
-   item [system.run](/manual/config/items/itemtypes/zabbix_agent#system.run)
-   [Script di avviso personalizzati](/manual/config/notifications/media/script)
-   [Comandi remoti](/manual/config/notifications/action/operation/remote_command)
-   [Script globali](/manual/web_interface/frontend_sections/alerts/scripts)

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