Garder un bot Discord en ligne 24/7 avec pm2
Un bot Discord qui s'arrête dès que vous fermez le terminal ne sert à rien. pm2 le garde en vie, le relance après un crash et au redémarrage du serveur. Voici comment.
Pourquoi utiliser un gestionnaire de processus ?
Un bot Discord pm2 continue de fonctionner lorsque vous fermez votre terminal SSH et peut redémarrer automatiquement après un crash. Sans gestionnaire de processus, la commande node index.js reste attachée à votre session : si vous fermez le terminal ou perdez la connexion, le bot peut s’arrêter.
PM2 est un gestionnaire de processus conçu pour les applications Node.js. Il exécute votre bot en arrière-plan et permet de :
- le démarrer avec un nom identifiable ;
- vérifier son état ;
- le relancer après une erreur ;
- consulter ses logs ;
- surveiller sa consommation de mémoire et de CPU ;
- restaurer les processus après un redémarrage du VPS ;
- gérer plusieurs bots depuis la même interface.
PM2 redémarre normalement une application qui quitte de manière inattendue. En revanche, pour que le bot revienne aussi après un redémarrage complet du VPS, vous devez configurer séparément pm2 startup et enregistrer la liste avec pm2 save.
PM2 maintient le processus actif, mais ne corrige pas les erreurs de votre code. Consultez les logs afin d’identifier les crashs répétés au lieu de laisser le bot redémarrer en boucle.
Avant de poursuivre, votre bot doit déjà fonctionner avec une commande classique comme :
node index.js
Pour préparer le projet, consultez le guide faire tourner un bot Discord en Node.js ou Python.
Installer PM2 sur le VPS
PM2 nécessite Node.js et npm. Connectez-vous d’abord à votre serveur Linux avec SSH. Le guide se connecter à un VPS en SSH détaille cette étape.
Vérifiez que Node.js et npm sont disponibles :
node --version
npm --version
Les deux commandes doivent retourner un numéro de version. Placez-vous ensuite dans le dossier de votre bot et vérifiez qu’il fonctionne :
cd /home/votre-utilisateur/mon-bot
node index.js
Arrêtez ce test avec :
Ctrl + C
Installez PM2 globalement avec npm :
sudo npm install -g pm2
Si Node.js a été installé uniquement pour votre utilisateur avec un gestionnaire comme NVM, sudo peut être inutile :
npm install -g pm2
Vérifiez l’installation :
pm2 --version
PM2 doit répondre avec son numéro de version.
Exécutez ensuite PM2 avec le même utilisateur Linux. Une liste créée avec
rootest distincte de celle créée avec votre compte habituel.
Lancer un bot Discord PM2
Placez-vous dans le répertoire contenant le fichier principal du bot :
cd /home/votre-utilisateur/mon-bot
Lancez index.js avec un nom explicite :
pm2 start index.js --name mon-bot
PM2 ajoute le programme à sa liste de processus et le démarre en arrière-plan. Vous pouvez fermer la session SSH sans arrêter le bot.
Affichez les processus enregistrés :
pm2 list
Vous obtenez un tableau contenant notamment :
- le nom du processus ;
- son identifiant PM2 ;
- son état ;
- le nombre de redémarrages ;
- sa mémoire utilisée ;
- son temps de fonctionnement.
Le statut attendu est :
online
Si votre point d’entrée porte un autre nom, adaptez la commande :
pm2 start bot.js --name bot-moderation
Vous pouvez également lancer un script défini dans package.json :
pm2 start npm --name mon-bot -- start
Cette syntaxe exécute la commande associée à npm start.
Pour contrôler un processus précis, utilisez son nom :
pm2 restart mon-bot
Le nom évite de dépendre d’un identifiant numérique susceptible de changer.
Consulter les logs du bot
Les logs permettent de vérifier la connexion à Discord, les commandes exécutées et les erreurs JavaScript.
Pour suivre les logs du bot en direct :
pm2 logs mon-bot
Pour afficher les logs de tous les processus :
pm2 logs
Pour limiter l’affichage aux 100 dernières lignes :
pm2 logs mon-bot --lines 100
Quittez l’affichage en direct avec :
Ctrl + C
Cette action ferme uniquement la vue des logs. Le bot continue de fonctionner en arrière-plan.
PM2 enregistre habituellement les sorties dans :
~/.pm2/logs/
Vous y trouverez des fichiers séparés pour les sorties normales et les erreurs :
mon-bot-out.log
mon-bot-error.log
Lorsqu’un bot redémarre sans arrêt, vérifiez le nombre de redémarrages avec :
pm2 list
Puis consultez immédiatement les erreurs :
pm2 logs mon-bot --lines 200
Les causes courantes comprennent :
Invalid token
Cannot find module
Missing Access
SyntaxError
UnhandledPromiseRejection
Ne publiez jamais un log contenant votre token Discord, une URL de webhook ou une autre donnée secrète.
Redémarrer automatiquement le bot au démarrage du VPS
Le processus survit à la fermeture du terminal, mais pas encore nécessairement au redémarrage complet du système. PM2 doit installer un script de démarrage adapté à votre distribution Linux.
Exécutez :
pm2 startup
PM2 affiche alors une commande personnalisée. Elle peut ressembler à ceci :
sudo env PATH=$PATH:/usr/bin pm2 startup systemd -u votre-utilisateur --hp /home/votre-utilisateur
Copiez et exécutez exactement la commande générée sur votre propre VPS. Ne recopiez pas aveuglément l’exemple ci-dessus : le chemin de Node.js, l’utilisateur et le dossier personnel peuvent être différents.
Enregistrez ensuite la liste actuelle des processus :
pm2 save
Cette commande sauvegarde notamment mon-bot afin que PM2 puisse le restaurer au démarrage.
La séquence complète est donc :
pm2 startup
# Exécuter la commande générée par PM2
pm2 save
Testez la configuration avec un redémarrage du VPS lorsque vous pouvez interrompre temporairement le service :
sudo reboot
Reconnectez-vous ensuite en SSH et contrôlez le bot :
pm2 list
Le processus doit apparaître avec le statut online.
Après l’ajout ou la suppression d’un bot, relancez
pm2 save. Sinon, PM2 peut restaurer une ancienne liste lors du prochain redémarrage.
Des sauvegardes automatiques sont incluses pour vous aider à restaurer. Conservez aussi vos propres exports réguliers : vous restez responsable de vos données.
Commandes PM2 utiles au quotidien
Voici les principales commandes pour administrer un ou plusieurs bots :
| Commande | Action |
|---|---|
pm2 list | Afficher tous les processus |
pm2 restart mon-bot | Redémarrer le bot |
pm2 stop mon-bot | Arrêter le bot sans le supprimer |
pm2 start mon-bot | Relancer un processus arrêté |
pm2 delete mon-bot | Retirer le processus de PM2 |
pm2 logs mon-bot | Afficher ses logs |
pm2 monit | Ouvrir le moniteur CPU et mémoire |
pm2 save | Enregistrer la liste à restaurer au boot |
pm2 reload mon-bot | Recharger le processus lorsque le mode utilisé le permet |
Après une modification du code, redémarrez le bot :
pm2 restart mon-bot
Pour mettre à jour les variables d’environnement transmises depuis le terminal :
pm2 restart mon-bot --update-env
Pour gérer plusieurs bots, attribuez un nom unique à chacun :
pm2 start moderation.js --name bot-moderation
pm2 start tickets.js --name bot-tickets
pm2 start musique.js --name bot-musique
pm2 save
Vous pouvez ensuite agir sur un seul bot :
pm2 restart bot-tickets
Ou sur tous les processus :
pm2 restart all
Évitez d’utiliser le mode cluster pour un bot Discord sans avoir vérifié sa compatibilité. Plusieurs instances du même bot peuvent traiter une interaction plusieurs fois ou nécessiter une architecture de sharding adaptée.
Alternative à PM2 : systemd
systemd est le gestionnaire de services intégré à de nombreuses distributions Linux. Il peut lancer directement votre bot au démarrage, le redémarrer après un crash et centraliser ses logs avec journalctl.
Il convient aux administrateurs souhaitant une intégration Linux native et une configuration entièrement maîtrisée. Il demande toutefois de créer manuellement un fichier de service, de définir l’utilisateur, le dossier de travail, les variables d’environnement et la politique de redémarrage.
Pour un premier bot Node.js, PM2 reste généralement plus simple grâce à ses commandes dédiées :
pm2 start
pm2 list
pm2 logs
pm2 restart
pm2 startup
pm2 save
Pour une mise en production plus complète, consultez le guide héberger un bot Discord 24 h/24 et 7 j/7.
En résumé
- Un bot lancé avec
node index.jspeut s’arrêter lorsque la session SSH est fermée. - Installez PM2 avec
npm install -g pm2. - Lancez votre bot avec
pm2 start index.js --name mon-bot. - Vérifiez son état avec
pm2 list. - Consultez les erreurs avec
pm2 logs mon-bot. - Utilisez
pm2 restart mon-botaprès une modification du code. - Exécutez
pm2 startup, puis la commande générée par PM2. - Enregistrez la liste des processus avec
pm2 save. - Relancez
pm2 saveaprès chaque ajout ou suppression de bot. - Donnez un nom unique à chaque processus si vous gérez plusieurs bots.
- Utilisez
pm2 monitpour surveiller la mémoire et le CPU. - Un bot Discord pm2 correctement configuré peut rester actif après une déconnexion SSH, un crash applicatif et un redémarrage du VPS.
- Pour garder votre bot en ligne depuis un panel de gestion avec support francophone, découvrez l’offre hébergement bot Discord TalCloud.