# Faire tourner des queue workers et démons avec Supervisor

> Gardez vos queue workers et processus longs en vie avec Supervisor. Ajoutez un processus, suivez son statut, arrêtez-le ou redémarrez-le et lisez son log.

La page **Processus** d'un serveur gère les processus de longue durée sous Supervisor. Un processus est une commande qui doit tourner en permanence, comme un queue worker Laravel, Horizon, Reverb ou un serveur Node.js. Supervisor le démarre au démarrage du serveur et le relance quand il s'arrête ou plante. Depuis cette page, vous ajoutez des processus, vérifiez s'ils tournent, les arrêtez, les démarrez ou les redémarrez, et lisez leur sortie.

La page est disponible sur les serveurs d'application, les serveurs web et les serveurs worker.

![La page Processus avec un queue worker qui fait tourner deux processus](https://ops.vimonto.com/docs-media/fr/server-processes.webp?v=161e760d "Processus sous Supervisor")

## Ajouter un processus

![Ajout d'un queue worker sur la page Processus](https://ops.vimonto.com/docs-media/fr/add-process.mp4?v=161e760d)

1. Ouvrez le serveur et choisissez **Processus** dans la barre latérale.
2. Cliquez sur **Ajouter un processus**.
3. Remplissez le formulaire (les champs sont expliqués ci-dessous).
4. Cliquez sur **Ajouter**.

Vimonto Deploy écrit un programme Supervisor pour le processus, le démarre et attend qu'il soit lancé. La ligne affiche **Ajout** pendant ce temps, puis le statut en direct.

| Champ | Défaut | Signification |
| --- | --- | --- |
| **Nom** | | Un nom pour reconnaître le processus, comme « Queue worker ». 60 caractères au maximum. |
| **Commande** | | La commande à exécuter, sur une seule ligne, comme `php artisan queue:work --sleep=3 --tries=3`. Les pipes et les variables fonctionnent tels que saisis. |
| **Répertoire** | le répertoire personnel de l'utilisateur | Où la commande démarre : un chemin complet, comme `/home/vimonto/example.com/current`. |
| **Exécuter en tant que** | l'utilisateur système | L'utilisateur système (`vimonto` par défaut) ou `root`. |
| **Processus** | 1 | Le nombre de copies de la commande qui tournent côte à côte, de 1 à 64. |
| **Temps de démarrage (s)** | 1 | Le temps pendant lequel il doit tourner pour être considéré comme démarré. Un processus qui se termine plus tôt compte comme un démarrage échoué. |
| **Temps d'arrêt (s)** | 15 | Le temps d'attente d'un arrêt propre avant que le processus ne soit tué. |
| **Signal d'arrêt** | TERM | Le signal envoyé pour arrêter le processus : TERM, HUP, INT, QUIT, KILL, USR1 ou USR2. |

> [!TIP]
> Pour un queue worker Laravel, réglez **Temps d'arrêt (s)** un peu au-dessus de la durée de votre job le plus long, pour qu'un worker puisse terminer le job en cours avant d'être arrêté. Les workers Laravel s'arrêtent proprement sur TERM.

### Exemple : un queue worker Laravel

| Champ | Valeur |
| --- | --- |
| **Nom** | Queue worker |
| **Commande** | `php artisan queue:work redis --sleep=3 --tries=3 --max-time=3600` |
| **Répertoire** | `/home/vimonto/example.com/current` |
| **Exécuter en tant que** | `vimonto` |
| **Processus** | 2 |

Utilisez le répertoire `current` d'un site, et non une release précise, pour que le worker exécute toujours le code en ligne. Pour un [site isolé](https://ops.vimonto.com/docs/fr/sites/create-a-site), les fichiers appartiennent à l'utilisateur propre du site ; ajoutez ses workers depuis la [page des files d'attente](https://ops.vimonto.com/docs/fr/sites/queues-and-scheduler) du site, qui les exécute sous le bon utilisateur.

## Que signifient les statuts ?

Le statut provient directement de Supervisor. Il est récupéré à l'ouverture de la page ; cliquez sur **Actualiser le statut** pour le récupérer à nouveau. Après avoir ajouté, modifié, arrêté, démarré ou redémarré un processus, la page le récupère d'elle-même une fois l'opération terminée.

| Statut | Signification |
| --- | --- |
| **En cours** | Chaque processus tourne. |
| **Démarrage** | Supervisor démarre le processus et attend que le temps de démarrage soit écoulé. |
| **Arrêt en cours** | Le processus a reçu son signal d'arrêt et s'arrête. |
| **Arrêté** | Le processus a été arrêté et ne tourne pas. |
| **Échoué** | Au moins un processus s'est terminé, n'a pas pu démarrer ou plante en boucle. Ouvrez le **Log** pour savoir pourquoi. |
| **Inconnu** | Supervisor ne connaît pas le processus, par exemple parce qu'il a été supprimé à la main. |

Quand seules certaines copies tournent, le statut affiche un compte, comme **En cours 1/2**.

## Arrêter, démarrer et redémarrer un processus

Utilisez les boutons de la ligne du processus :

- **Arrêter** arrête chaque copie du processus jusqu'à ce que vous le démarriez à nouveau. Un redémarrage du serveur le relance.
- **Démarrer** apparaît une fois le processus arrêté et le relance.
- **Redémarrer** arrête puis démarre chaque copie, par exemple pour charger du nouveau code ou un `.env` modifié.

Chaque action s'exécute sous forme de tâche que vous pouvez suivre sur la page [Activité](https://ops.vimonto.com/docs/fr/organization/activity). Une seule de ces actions à la fois peut tourner par processus.

> [!NOTE]
> Les queue workers des sites sont redémarrés après chaque déploiement, pour qu'ils prennent en compte le nouveau code. Vous n'avez besoin de **Redémarrer** qu'après des modifications faites en dehors d'un déploiement.

## Lire le log

Cliquez sur **Log** pour voir les 300 dernières lignes de la sortie du processus (sortie standard et erreurs ensemble), récupérées depuis le serveur au moment du clic. Supervisor écrit la sortie dans `/var/log/vimonto/daemon-{id}.log` et conserve jusqu'à 10 Mo par fichier, avec trois fichiers plus anciens.

## Modifier un processus

Ouvrez le menu d'actions (**⋯**) et choisissez **Modifier**. Modifiez les champs et cliquez sur **Enregistrer**. Vimonto Deploy réécrit le programme Supervisor et redémarre le processus avec ses nouveaux réglages.

Si l'ajout ou la modification d'un processus échoue, la ligne affiche **Échoué** ; ouvrez le menu d'actions et choisissez **Réessayer**.

## Supprimer un processus

Ouvrez le menu d'actions (**⋯**), choisissez **Supprimer** et confirmez avec **Supprimer le processus**. Le processus est arrêté, son programme Supervisor et son log sont supprimés, et il ne démarre plus.

## Lien entre processus et sites

La page **Processus** affiche chaque processus Supervisor du serveur, y compris ceux qui appartiennent à des sites :

- Les **Queue workers** que vous ajoutez sur la page [files d'attente et planificateur](https://ops.vimonto.com/docs/fr/sites/queues-and-scheduler) d'un site. Cette page propose un formulaire conçu pour les workers Laravel (connexion, file, timeout, tentatives, mémoire) et construit la commande pour vous.
- Les **processus des fonctionnalités de site**, comme Horizon, Reverb, Pulse ou Inertia SSR, qu'une [fonctionnalité de site](https://ops.vimonto.com/docs/fr/sites/site-features) crée quand vous l'activez.

Ces processus apparaissent ici avec leur statut, leur **Log** et les boutons **Arrêter**, **Démarrer** et **Redémarrer**. Les processus d'une fonctionnalité de site portent un badge **Via …**, comme **Via Horizon**, et n'ont pas de menu d'actions ici : modifiez-les via la fonctionnalité dans l'en-tête du site, et désactivez la fonctionnalité pour les supprimer. Un worker que vous avez ajouté vous-même se modifie ou se supprime sur la page du site ou ici.

## Questions fréquentes

### Quelle est la différence entre un processus et une tâche planifiée ?

Un processus tourne en permanence et est relancé quand il s'arrête. Une [tâche planifiée](https://ops.vimonto.com/docs/fr/servers/scheduler) exécute une commande à heures fixes, comme chaque minute ou chaque nuit, puis se termine.

### Mon processus affiche sans cesse Échoué. Que vérifier ?

Ouvrez le **Log**. Les causes courantes sont un **Répertoire** erroné, une commande introuvable parce qu'elle nécessite un chemin complet, une valeur manquante dans le `.env`, ou une commande qui se termine immédiatement au lieu de tourner au premier plan. Supervisor a besoin que la commande continue de tourner ; ne la lancez pas en arrière-plan avec `&` ou une option `--daemon`.

### Un processus doit-il tourner en root ?

Rarement. Faites tourner les processus sous l'utilisateur système, sauf si la commande a vraiment besoin de root, pour qu'un bug de votre application ne puisse pas modifier le reste du serveur.

### Puis-je faire tourner une application Node.js comme processus ?

Oui. Utilisez une commande comme `npm run start` ou `node server.js` avec le répertoire de l'application. Pour un site Node.js, la page **Processus** du site configure cela pour vous.
