PM2 : premiers pas
Démarrer une application
Section intitulée « Démarrer une application »pm2 start app.js # nom déduit du fichierpm2 start app.js --name api # nom explicitepm2 start app.js --name api -- --port 3000 # arguments passés à l'applicationpm2 start npm --name site -- start # script « start » de package.jsonpm2 start "python3 tache.py" --name tache # un autre interpréteurLes options de PM2 se placent avant -- ; ce qui suit -- est transmis à l’application.
Variables d’environnement :
PORT=3000 NODE_ENV=production pm2 start app.js --name apiLister et inspecter
Section intitulée « Lister et inspecter »pm2 list # alias : pm2 ls, pm2 statuspm2 show api # détails (chemin, journaux, redémarrages, mémoire)pm2 jlist # sortie JSON pour les scriptspm2 monit # tableau de bord dans le terminalColonnes de pm2 list :
| Colonne | Sens |
|---|---|
id |
Identifiant numérique du processus |
mode |
fork (un processus) ou cluster |
↺ |
Nombre de redémarrages : une valeur qui grimpe signale un plantage répété |
status |
online, stopped, errored, launching |
cpu, mem |
Consommation |
Contrôler
Section intitulée « Contrôler »pm2 restart api # arrêt puis démarrage (coupure brève)pm2 reload api # rechargement sans coupure (mode cluster)pm2 stop apipm2 start api # relance une application arrêtéepm2 delete api # retire de la liste de PM2pm2 restart allpm2 stop allpm2 delete allUne application se désigne par son nom ou son id.
Mettre à jour les variables d’environnement
Section intitulée « Mettre à jour les variables d’environnement »pm2 restart api --update-envSans --update-env, PM2 conserve les variables d’environnement du démarrage initial.
Exemple complet
Section intitulée « Exemple complet »cd /srv/monappnpm ci --omit=devpm2 start src/serveur.js --name apipm2 logs api --lines 20curl -I http://127.0.0.1:3000/pm2 savepm2 save enregistre la liste pour la restaurer après un redémarrage (voir Démarrage automatique).
Limiter les redémarrages et la mémoire
Section intitulée « Limiter les redémarrages et la mémoire »pm2 start app.js --name api --max-memory-restart 300Mpm2 start app.js --name api --restart-delay 3000pm2 start app.js --name api --max-restarts 10 --min-uptime 5000| Option | Effet |
|---|---|
--max-memory-restart 300M |
Redémarre si la mémoire dépasse la limite (contient une fuite, ne la corrige pas) |
--restart-delay |
Attente entre deux redémarrages, en millisecondes |
--max-restarts + --min-uptime |
Une application qui plante plus de N fois sans durer min-uptime passe en errored au lieu de boucler |
Surveiller les fichiers (développement)
Section intitulée « Surveiller les fichiers (développement) »pm2 start app.js --name api --watch --ignore-watch "node_modules logs"--watch redémarre l’application à chaque modification : réservé au développement, jamais en production.
Tâche planifiée
Section intitulée « Tâche planifiée »pm2 start sauvegarde.js --name sauvegarde --cron-restart "0 3 * * *" --no-autorestart--cron-restart relance le script selon une expression cron ; --no-autorestart évite qu’il redémarre en continu une fois terminé. Pour des tâches planifiées, les minuteurs systemd sont souvent plus adaptés (voir systemd : minuteurs).
Dépannage
Section intitulée « Dépannage »| Symptôme | Piste |
|---|---|
Statut errored |
pm2 logs api --err --lines 50 : erreur de démarrage |
Compteur ↺ qui augmente |
Plantage en boucle : lire les journaux d’erreur |
Script not found |
Chemin relatif incorrect : utiliser un chemin absolu ou --cwd |
Error: listen EADDRINUSE |
Port déjà occupé : sudo ss -tlnp | grep 3000 |
| Les variables d’environnement ne changent pas | pm2 restart api --update-env |
| Application lancée deux fois | pm2 list : même application sous deux noms ; pm2 delete du doublon |
Ubuntu 24.04 et 26.04 : différences à connaître
Section intitulée « Ubuntu 24.04 et 26.04 : différences à connaître »Les commandes sont identiques sur les deux versions.
Pour aller plus loin
Section intitulée « Pour aller plus loin »- Démarrage rapide
- Suite : Fichier ecosystem