Comment lancer un processus en background + autorestart

Comment lancer un processus en background + autorestart

Dans ce guide sur l'administration d'un serveur VPS, nous allons vous expliquer comment laisser tourner une application en background telle qu'un bot discord, une application nodejs ou un serveur de jeu (minecraft, gmod, fivem, etc) sur avec supervisor sur un VPS linux sous Debian , Ubuntu ou CentOS.

Cette méthode permet de garder une application démarrée même si vous vous déconnectez de votre VPS. De plus, Supervisor propose des fonctionnalités supplémentaires, pour faciliter la gestion des processus, leur debug avec les logs, ainsi que le redémarrage automatiquement en cas de plantage.

Installer Supervisor

Supervisor est une application pour systèmes linux permettant de contrôler un processus. Vous devez posséder les droits administrateurs pour entrer les commandes suivantes.

Pour l'installer, nous allons utiliser le gestionnaire de paquet.

Installation Supervisor sur Debian

Pour installer Supervisor sur Debian :

apt update && apt install -y supervisor

Installation Supervisor sur Ubuntu

Pour installer Supervisor sur Ubuntu :

sudo apt update && sudo apt install -y supervisor

Installation Supervisor sur CentOS

Pour installer Supervisor sur CentOS :

yum install supervisor

Configuration de supervisord

Supervisord est la partie responsable de démarrer et surveiller les applications configurées. Il redémarrera également ces processus en cas de crash, si spécifié dans la configuration. La configuration générale s'effectue dans le fichier /etc/supervisor/supervisord.conf.

Ci-dessous vous trouverez plusieurs exemples de configuration, pour bot discord ou serveur de jeu.

Pour prendre en compte toute nouvelle configuration:

/etc/init.d/supervisor restart

Redémarrage automatique Bot Discord

Pour gérer le lancement et redémarrage automatique d'un bot discord, créez un nouveau fichier /etc/supervisor/conf.d/bot-discord.conf avec une configuration du genre:

[program:discord_bot]
directory=/var/www/discord/
command=node index.js
autorestart=true
user=www-data
redirect_stderr=true
stdout_logfile=/var/www/discord/bot.log
stdout_logfile_maxbytes=50MB
startretries=3
startsecs=0
  • directory contient le répertoire où est votre bot discord.
  • command contient la commande pour lancer le bot discord.
  • autorestartà true pour un redémarrage automatique en cas de crash discord.
  • user contient le nom de l'utilisateur système qui va lancer le processus.
  • redirect_stderr à true pour récupérer les erreurs du bots dans le fichier log.
  • stdout_logfile contient le chemin vers le fichier log du bot, il contiendra le retour affiché par le bot.
  • stdout_logfile_maxbytes est la taille maximale du fichier log.
  • startretries indique le nombre de démarrage en erreur avant que l'autorestart se désactive. Permet d'éviter un redémarrage en boucle en cas d'erreur.

Redémarrage automatique serveur de jeu

Pour gérer le lancement et redémarrage automatique d'un serveur de jeu, créez un nouveau fichier /etc/supervisor/conf.d/gameserver.conf avec une configuration du genre:

[program:gameserver]
directory=/home/minecraft/server/
command=java -jar minecraft_server.js
autorestart=true
user=minecraft
redirect_stderr=true
stdout_logfile=/home/minecraft/server/gameserver.log
stdout_logfile_maxbytes=100MB
startretries=3
startsecs=0
  • directoy contient le répertoire où est votre serveur de jeu.
  • command contient la commande pour lancer le votre serveur de jeu.
  • autorestartà true pour un redémarrage automatique en cas de crash du votre serveur de jeu.
  • user contient le nom de l'utilisateur système qui va lancer le serveur.
  • redirect_stderr à true pour récupérer les erreurs dans le fichier log spécifié.
  • stdout_logfile contient le chemin vers le fichier log.
  • stdout_logfile_maxbytes est la taille maximale du fichier log avant rotation automatique.
  • startretries indique le nombre de démarrage en erreur avant que l'autorestart se désactive. Permet d'éviter un redémarrage en boucle en cas d'erreur.

Commandes supervisord

Une multitude de commandes sont disponibles, pour voir la liste complète, tapez man supervisorctl.

Démarrer supervisord

/etc/init.d/supervisor start

Arrêter supervisord

/etc/init.d/supervisor stop

Redémarrer supervisord

/etc/init.d/supervisor restart

Statut des processus

Pour afficher la liste des processus configurés dans supervisord et leur statut (lancé, arreté, crash, etc) :

supervisorctl status

Va retourner par exemple:

discord_bot                      RUNNING   pid 6183, uptime 17:08:51

Démarrer un processus

supervisorctl start NOMDUPROCESSUS

Arrêter un processus

supervisorctl stop NOMDUPROCESSUS

Redémarrer un processus

supervisorctl restart NOMDUPROCESSUS
Discord Hytale, Minecraft, Rust, ARK, FiveM