# Eseguire queue worker e daemon con Supervisor

> Mantieni attivi queue worker e processi di lunga durata con Supervisor: aggiungi un processo, vedine lo stato live, fermalo, avvialo o riavvialo e leggi il log.

La pagina **Processi** di un server gestisce i processi di lunga durata sotto Supervisor. Un processo è un comando che deve restare sempre in esecuzione, come un queue worker Laravel, Horizon, Reverb o un server Node.js. Supervisor lo avvia all'accensione del server e lo riavvia quando si ferma o va in crash. Da questa pagina aggiungi processi, vedi se sono in esecuzione, li fermi, li avvii o li riavvii, e leggi il loro output.

La pagina è disponibile su app server, web server e worker server.

![La pagina Processi con un queue worker che esegue due processi](https://ops.vimonto.com/docs-media/it/server-processes.webp?v=161e760d "Processi sotto Supervisor")

## Aggiungere un processo

![Aggiunta di un queue worker nella pagina Processi](https://ops.vimonto.com/docs-media/it/add-process.mp4?v=161e760d)

1. Apri il server e scegli **Processi** nella barra laterale.
2. Clicca su **Aggiungi processo**.
3. Compila il modulo (i campi sono spiegati più sotto).
4. Clicca su **Aggiungi**.

Vimonto Deploy scrive un programma Supervisor per il processo, lo avvia e attende che sia attivo. Nel frattempo la riga mostra **Aggiunta in corso**, poi lo stato live.

| Campo | Predefinito | Significato |
| --- | --- | --- |
| **Nome** | | Un nome per riconoscere il processo, ad esempio "Queue worker". Al massimo 60 caratteri. |
| **Comando** | | Il comando da eseguire, su una sola riga, ad esempio `php artisan queue:work --sleep=3 --tries=3`. Pipe e variabili funzionano così come le scrivi. |
| **Directory** | la home directory dell'utente | Dove parte il comando: un percorso completo, ad esempio `/home/vimonto/example.com/current`. |
| **Esegui come** | l'utente di sistema | L'utente di sistema (`vimonto` per impostazione predefinita) o `root`. |
| **Processi** | 1 | Quante copie del comando girano affiancate, da 1 a 64. |
| **Tempo di avvio (s)** | 1 | Per quanto tempo deve girare per essere considerato avviato. Un processo che termina prima conta come avvio non riuscito. |
| **Tempo di arresto (s)** | 15 | Quanto attendere un arresto pulito prima che il processo venga terminato forzatamente. |
| **Segnale di stop** | TERM | Il segnale inviato per fermare il processo: TERM, HUP, INT, QUIT, KILL, USR1 o USR2. |

> [!TIP]
> Per un queue worker Laravel, imposta **Tempo di arresto (s)** un po' più lungo del tuo job più lungo, così un worker può finire il job in corso prima di essere fermato. I worker Laravel si fermano in modo pulito con TERM.

### Esempio: un queue worker Laravel

| Campo | Valore |
| --- | --- |
| **Nome** | Queue worker |
| **Comando** | `php artisan queue:work redis --sleep=3 --tries=3 --max-time=3600` |
| **Directory** | `/home/vimonto/example.com/current` |
| **Esegui come** | `vimonto` |
| **Processi** | 2 |

Usa la directory `current` di un sito, non una release specifica, così il worker esegue sempre il codice live. Per un [sito isolato](https://ops.vimonto.com/docs/it/sites/create-a-site), i file appartengono all'utente proprio del sito; aggiungi i suoi worker dalla [pagina delle queue](https://ops.vimonto.com/docs/it/sites/queues-and-scheduler) del sito, che li esegue con l'utente giusto.

## Cosa significano gli stati?

Lo stato arriva direttamente da Supervisor. Viene recuperato quando apri la pagina; clicca su **Aggiorna stato** per recuperarlo di nuovo. Dopo che hai aggiunto, modificato, fermato, avviato o riavviato un processo, la pagina lo recupera da sola al termine dell'operazione.

| Stato | Significato |
| --- | --- |
| **In esecuzione** | Tutti i processi sono in esecuzione. |
| **Avvio in corso** | Supervisor sta avviando il processo e attende che passi il tempo di avvio. |
| **Arresto in corso** | Il processo ha ricevuto il segnale di stop e si sta chiudendo. |
| **Fermato** | Il processo è stato fermato e non è in esecuzione. |
| **Non riuscito** | Almeno un processo è terminato, non è riuscito ad avviarsi o continua ad andare in crash. Apri il **Log** per capire perché. |
| **Sconosciuto** | Supervisor non conosce il processo, ad esempio perché è stato rimosso a mano. |

Quando gira solo una parte delle copie, lo stato mostra un conteggio, ad esempio **In esecuzione 1/2**.

## Fermare, avviare e riavviare un processo

Usa i pulsanti nella riga del processo:

- **Ferma** ferma tutte le copie del processo finché non lo avvii di nuovo. Un riavvio del server lo avvia di nuovo.
- **Avvia** compare quando un processo è fermo e lo avvia di nuovo.
- **Riavvia** ferma e avvia tutte le copie, ad esempio per caricare nuovo codice o un `.env` modificato.

Ogni azione viene eseguita come un task che puoi seguire nella pagina [attività](https://ops.vimonto.com/docs/it/organization/activity). Per ogni processo può girare solo una di queste azioni alla volta.

> [!NOTE]
> I queue worker dei siti vengono riavviati dopo ogni deploy, così caricano il nuovo codice. **Riavvia** ti serve solo dopo modifiche fatte al di fuori di un deploy.

## Leggere il log

Clicca su **Log** per vedere le ultime 300 righe dell'output del processo (output standard ed errori insieme), recuperate dal server al momento del clic. Supervisor scrive l'output in `/var/log/vimonto/daemon-{id}.log` e conserva fino a 10 MB per file, con tre file precedenti.

## Modificare un processo

Apri il menu delle azioni (**⋯**) e scegli **Modifica**. Cambia i campi e clicca su **Salva**. Vimonto Deploy riscrive il programma Supervisor e riavvia il processo con le nuove impostazioni.

Se l'aggiunta o la modifica di un processo non riesce, la riga mostra **Non riuscito**; apri il menu delle azioni e scegli **Riprova**.

## Rimuovere un processo

Apri il menu delle azioni (**⋯**), scegli **Rimuovi** e conferma con **Rimuovi processo**. Il processo viene fermato, il suo programma Supervisor e il suo log vengono eliminati e non si avvia più.

## Come i processi si collegano ai siti

La pagina **Processi** mostra tutti i processi Supervisor del server, compresi quelli che appartengono ai siti:

- **Queue worker** che aggiungi nella pagina [queue e scheduler](https://ops.vimonto.com/docs/it/sites/queues-and-scheduler) di un sito. Quella pagina offre un modulo pensato per i worker Laravel (connessione, queue, timeout, tentativi, memoria) e costruisce il comando per te.
- **Processi delle funzionalità del sito**, come Horizon, Reverb, Pulse o Inertia SSR, che una [funzionalità del sito](https://ops.vimonto.com/docs/it/sites/site-features) crea quando la attivi.

Questi processi compaiono qui con il loro stato, il loro **Log** e i pulsanti **Ferma**, **Avvia** e **Riavvia**. I processi di una funzionalità del sito hanno un badge **Tramite …**, come **Tramite Horizon**, e qui non hanno un menu delle azioni: modificali tramite la funzionalità nell'intestazione del sito, e disattiva la funzionalità per rimuoverli. Un worker che hai aggiunto tu lo modifichi o lo rimuovi nella pagina del sito o qui.

## Domande frequenti

### Qual è la differenza tra un processo e un job pianificato?

Un processo gira sempre e viene riavviato quando si ferma. Un [job pianificato](https://ops.vimonto.com/docs/it/servers/scheduler) esegue un comando a orari stabiliti, ad esempio ogni minuto o ogni notte, e poi termina.

### Il mio processo continua a mostrare Non riuscito. Cosa devo controllare?

Apri il **Log**. Le cause comuni sono una **Directory** sbagliata, un comando non trovato perché richiede un percorso completo, un valore mancante nel `.env`, o un comando che termina subito invece di restare in primo piano. Supervisor ha bisogno che il comando resti in esecuzione; non avviarlo in background con `&` o con un'opzione `--daemon`.

### Un processo deve girare come root?

Raramente. Esegui i processi con l'utente di sistema, a meno che il comando non richieda davvero root, così un bug nella tua applicazione non può modificare il resto del server.

### Posso eseguire un'applicazione Node.js come processo?

Sì. Usa un comando come `npm run start` o `node server.js` con la directory dell'applicazione. Per un sito Node.js, la pagina **Processi** del sito lo configura per te.
