Aller au contenu

PM2 : premiers pas

Fenêtre de terminal
pm2 start app.js # nom déduit du fichier
pm2 start app.js --name api # nom explicite
pm2 start app.js --name api -- --port 3000 # arguments passés à l'application
pm2 start npm --name site -- start # script « start » de package.json
pm2 start "python3 tache.py" --name tache # un autre interpréteur

Les options de PM2 se placent avant -- ; ce qui suit -- est transmis à l’application.

Variables d’environnement :

Fenêtre de terminal
PORT=3000 NODE_ENV=production pm2 start app.js --name api
Fenêtre de terminal
pm2 list # alias : pm2 ls, pm2 status
pm2 show api # détails (chemin, journaux, redémarrages, mémoire)
pm2 jlist # sortie JSON pour les scripts
pm2 monit # tableau de bord dans le terminal

Colonnes 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
Fenêtre de terminal
pm2 restart api # arrêt puis démarrage (coupure brève)
pm2 reload api # rechargement sans coupure (mode cluster)
pm2 stop api
pm2 start api # relance une application arrêtée
pm2 delete api # retire de la liste de PM2
pm2 restart all
pm2 stop all
pm2 delete all

Une application se désigne par son nom ou son id.

Fenêtre de terminal
pm2 restart api --update-env

Sans --update-env, PM2 conserve les variables d’environnement du démarrage initial.

Fenêtre de terminal
cd /srv/monapp
npm ci --omit=dev
pm2 start src/serveur.js --name api
pm2 logs api --lines 20
curl -I http://127.0.0.1:3000/
pm2 save

pm2 save enregistre la liste pour la restaurer après un redémarrage (voir Démarrage automatique).

Fenêtre de terminal
pm2 start app.js --name api --max-memory-restart 300M
pm2 start app.js --name api --restart-delay 3000
pm2 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
Fenêtre de terminal
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.

Fenêtre de terminal
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).

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.