Aller au contenu

PM2 : démarrage automatique

Sans configuration, les applications PM2 ne redémarrent pas après un redémarrage du serveur. pm2 startup crée un service systemd qui lance PM2 au démarrage, et pm2 save mémorise la liste des applications à relancer.

Exécuter PM2 sous un utilisateur sans privilèges :

Fenêtre de terminal
sudo adduser --disabled-password --gecos "" appli
sudo -iu appli

Installer Node.js et PM2 pour cet utilisateur (voir Installation).

En tant que cet utilisateur :

Fenêtre de terminal
pm2 start ecosystem.config.cjs --env production
pm2 startup systemd

PM2 affiche une commande à exécuter avec sudo, du type :

[PM2] To setup the Startup Script, copy/paste the following command:
sudo env PATH=$PATH:/usr/bin /home/appli/.npm-global/lib/node_modules/pm2/bin/pm2 startup systemd -u appli --hp /home/appli

La copier telle quelle depuis un compte autorisé à utiliser sudo, puis revenir à l’utilisateur de l’application :

Fenêtre de terminal
pm2 save

Le service créé s’appelle pm2-<utilisateur> :

Fenêtre de terminal
systemctl status pm2-appli
sudo systemctl enable pm2-appli
Fenêtre de terminal
sudo reboot
# après le redémarrage
sudo -iu appli pm2 list
systemctl status pm2-appli

Les applications doivent être online sans intervention.

pm2 save écrit la liste actuelle dans ~/.pm2/dump.pm2. À refaire après chaque ajout, suppression ou changement d’application : sinon, un redémarrage restaure l’ancienne liste.

Fenêtre de terminal
pm2 start nouvelle-app.js --name worker
pm2 save

Restauration manuelle :

Fenêtre de terminal
pm2 resurrect

Le service systemd ne charge pas le profil du shell : le chemin de Node.js (installé par nvm) doit être fourni. La commande générée par pm2 startup intègre le PATH courant : l’exécuter dans un shell où node est disponible (which node). Après un changement de version de Node.js :

Fenêtre de terminal
pm2 unstartup systemd
nvm use 22
pm2 startup systemd # copier la nouvelle commande sudo
pm2 save
Fenêtre de terminal
pm2 unstartup systemd
Élément Rôle
pm2-appli.service Lance le démon PM2 au démarrage et le restaure (pm2 resurrect)
~/.pm2/dump.pm2 Liste des applications restaurées
Application Lancée par PM2, avec les variables d’environnement enregistrées au moment du pm2 save
Fenêtre de terminal
sudo journalctl -u pm2-appli -n 50 --no-pager

Pour des applications simples, systemd seul est plus léger et offre plus d’isolation (voir Node.js : mise en production et systemd : durcissement).

Symptôme Piste
Applications absentes après le redémarrage pm2 save oublié, ou service désactivé : systemctl is-enabled pm2-appli
Le service échoue (node: not found) PATH sans Node.js : refaire pm2 unstartup puis pm2 startup avec node disponible
Applications en errored après le redémarrage Réseau ou base de données pas encore prête : prévoir des tentatives de reconnexion dans l’application
pm2 startup n’affiche pas de commande Service déjà présent : pm2 unstartup systemd puis relancer
Mauvaises variables d’environnement après le redémarrage pm2 restart <nom> --update-env puis pm2 save
Le service s’arrête à la déconnexion SSH pm2-<utilisateur> n’est pas lancé : systemctl status pm2-appli ; vérifier qu’il est activé

Ubuntu 24.04 et 26.04 : différences à connaître

Section intitulée « Ubuntu 24.04 et 26.04 : différences à connaître »

Le service repose sur systemd (255 sur 24.04, 259 sur 26.04) ; la procédure est la même. Après une montée de version d’Ubuntu, réinstaller Node.js et PM2 si nécessaire, puis refaire pm2 unstartup / pm2 startup / pm2 save.