Votre serveur de jeu tourne en fond de tâche dans un terminal tmux, et à chaque reboot vous devez le relancer à la main. Un crash en pleine nuit reste sans réponse jusqu'au lendemain matin. Ce tutoriel vous explique comment créer un service systemd pour n'importe quel serveur de jeu Linux, afin qu'il démarre automatiquement au démarrage du VPS et se relance seul en cas de crash, sans aucune intervention manuelle. C'est la base pour administrer et configurer un serveur de jeu en production sur un serveur VPS Linux ou un serveur dédié.
Pourquoi utiliser systemd pour un serveur de jeu ?
systemd est le gestionnaire de services par défaut sur toutes les distributions Linux modernes (Ubuntu, Debian, Rocky Linux, Fedora, Arch). Il remplace les scripts init.d et les solutions artisanales comme nohup ou screen par un système robuste conçu pour administrer des services en production. Ses avantages pour un administrateur :
- Démarrage automatique au boot du serveur VPS ou dédié, avant même que quiconque se connecte en SSH.
- Redémarrage automatique sur crash avec un délai configurable, grâce à la directive
Restart=on-failure. - Gestion centralisée des logs via
journalctl, sans fichier de log custom à gérer, ni script shell de rotation. - Isolation des droits : le processus peut tourner sous un utilisateur dédié, sans droits root ni accès superutilisateur.
- Contrôle des ressources : possibilité de limiter l'utilisation CPU et la consommation mémoire via les cgroups intégrés au noyau Linux.
Ces fonctionnalités s'appliquent aussi bien à un serveur FiveM, Minecraft, Rust ou tout autre daemon de jeu hébergé sur un VPS Linux ou un serveur dédié. Sur un serveur VPS administré en SSH, systemd est l'outil d'administration standard pour gérer les services et démons en production.
Prérequis
Avant de créer et configurer l'unit file sur votre serveur VPS ou serveur dédié, assurez-vous de disposer de :
- Un VPS ou serveur dédié sous Linux (Ubuntu 22.04/24.04, Debian 12, Rocky Linux 9, etc.) accessible en SSH.
- Un accès root ou sudo sur la ligne de commande SSH de l'administrateur.
- Le binaire de votre serveur de jeu déjà installé et fonctionnel en lancement manuel depuis le terminal.
- Un utilisateur Linux dédié (ici
gameserver). Créez-le si nécessaire avecadduser --system --no-create-home gameserver. Un utilisateur dédié est indispensable pour isoler les droits du processus et éviter tout accès non autorisé aux fichiers système.
Si votre serveur de jeu dépend d'une base de données MySQL ou d'un autre service réseau démarré par systemd, vous pouvez l'indiquer dans la directive After= (voir ci-dessous). Ainsi le daemon de jeu attendra la disponibilité du service réseau avant de démarrer.
Structure d'un unit file systemd
Un fichier de service systemd est un fichier texte en syntaxe INI, placé dans /etc/systemd/system/. C'est là que les administrateurs placent leurs configurations de service personnalisées sur un serveur Linux. La conf d'un service standard comporte trois sections principales :
[Unit]
Description=Mon serveur de jeu
After=network.target
[Service]
Type=simple
User=gameserver
WorkingDirectory=/opt/gameserver
ExecStart=/opt/gameserver/start.sh
Restart=on-failure
RestartSec=10s
[Install]
WantedBy=multi-user.target
- [Unit] : métadonnées et dépendances.
After=network.targetgarantit que la carte réseau est configurée avant le lancement du jeu, ce qui est indispensable pour un serveur qui écoute sur un port réseau. - [Service] : comportement du processus daemon.
Type=simpleconvient à la quasi-totalité des serveurs de jeu qui ne forkent pas en arrière-plan. - [Install] : configurations du démarrage automatique.
WantedBy=multi-user.targetactive le service sur un serveur VPS sans interface graphique.
Les directives clés pour la fiabilité
Restart= et RestartSec=
Restart=on-failure demande à systemd de relancer le service uniquement si le processus se termine avec un code non nul (crash). Les arrêts propres via systemctl stop ne déclenchent pas de redémarrage. Cette directive est la base de la haute disponibilité d'un serveur de jeu en production.
RestartSec=10s impose un délai de 10 secondes entre le crash et le relancement. Ce délai est important pour éviter une boucle de redémarrages rapides en cas d'erreur persistante au démarrage : fichier de configurations manquant, port réseau déjà utilisé par un autre service, espace disque insuffisant sur le SSD, etc.
Pour une protection encore plus robuste, vous pouvez limiter le nombre de redémarrages avec :
StartLimitIntervalSec=120s
StartLimitBurst=3
Ces deux directives se placent dans la section [Unit] (pas dans [Service]) et empêchent une boucle infinie : après 3 crashes en moins de 120 secondes, systemd déclare le service en échec plutôt que de boucler indéfiniment sur le VPS.
User= et WorkingDirectory=
Faire tourner un serveur de jeu en root est inutile et risqué pour la sécurité du serveur VPS. User=gameserver assure que le daemon n'a pas de droits superutilisateur. WorkingDirectory= fixe le répertoire courant du processus, indispensable pour les serveurs qui cherchent leurs ressources en chemin relatif. Un administrateur utilise systématiquement ces deux directives pour un service en production.
Passer des variables d'environnement
Si votre serveur de jeu a besoin de variables d'environnement (clés d'API, adresses IP internes, chemins custom, paramètres réseau), ajoutez dans la section [Service] :
Environment="GAME_PORT=30120"
Environment="GAME_DATA=/opt/gameserver/data"
Pour les secrets, préférez EnvironmentFile=/etc/gameserver/env pointant vers un fichier lisible uniquement par root (chmod 600). C'est une bonne pratique de sécurité pour tout service en production hébergé sur un serveur VPS ou dédié, et évite d'exposer des informations sensibles dans les logs ou dans ps aux.
Limiter l'utilisation CPU et mémoire
systemd s'appuie sur les cgroups Linux pour contraindre les ressources d'un service daemon. Utile quand plusieurs serveurs de jeu cohabitent sur le même VPS Linux avec des ressources SSD et RAM partagées :
CPUQuota=80%
MemoryLimit=4G
Ces directives s'ajoutent dans la section [Service]. Elles évitent qu'un serveur de jeu monopolise l'ensemble du CPU ou sature la RAM au détriment des autres services présents sur la machine, comme un serveur web Nginx ou une instance de base de données.
Déclarer des dépendances réseau et services
Si votre serveur de jeu dépend d'un service réseau comme une base de données MySQL ou un serveur de cache démarré par systemd, utilisez After= et Requires= :
[Unit]
Description=Serveur FiveM GTA RP
After=network.target mysql.service
Requires=mysql.service
Avec Requires=, si le service MySQL s'arrête, systemd arrêtera automatiquement le daemon de jeu aussi. After= seul garantit seulement l'ordre de démarrage. Pour un serveur FiveM qui utilise une adresse IP et un port réseau spécifiques, cette configuration assure que la pile réseau et la base de données sont disponibles avant le lancement.
Exemple complet : service FiveM
Voici un unit file complet pour un serveur FiveM hébergé dans /opt/fivem sur un serveur VPS Linux :
[Unit]
Description=Serveur FiveM GTA RP
After=network.target
StartLimitIntervalSec=120s
StartLimitBurst=3
[Service]
Type=simple
User=fivem
Group=fivem
WorkingDirectory=/opt/fivem
ExecStart=/opt/fivem/run.sh +exec server.cfg
Restart=on-failure
RestartSec=10s
StandardOutput=journal
StandardError=journal
SyslogIdentifier=fivem-server
[Install]
WantedBy=multi-user.target
Les directives StandardOutput=journal et SyslogIdentifier=fivem-server redirigent toute la sortie du daemon vers journald, consultable ensuite avec journalctl -u fivem-server -f. C'est nettement plus pratique qu'un fichier de log rotatif à gérer manuellement sur le serveur dédié ou VPS.
Exemple complet : service Minecraft
Pour un serveur Minecraft Paper ou Vanilla dans /opt/minecraft sur un VPS Linux :
[Unit]
Description=Serveur Minecraft Java
After=network.target
StartLimitIntervalSec=120s
StartLimitBurst=3
[Service]
Type=simple
User=minecraft
WorkingDirectory=/opt/minecraft
ExecStart=/usr/bin/java -Xms2G -Xmx4G -jar server.jar nogui
Restart=on-failure
RestartSec=15s
StandardOutput=journal
StandardError=journal
SyslogIdentifier=minecraft-server
[Install]
WantedBy=multi-user.target
Adaptez -Xms et -Xmx à la RAM disponible sur votre VPS. Si vous avez besoin d'aide pour dimensionner la mémoire, consultez notre guide sur la réduction de la consommation mémoire d'un serveur de jeu Linux.
Activer et démarrer le service
Une fois le fichier créé dans /etc/systemd/system/fivem-server.service, exécutez ces commandes depuis votre ligne de commande en tant que root ou avec sudo sur votre serveur VPS ou dédié :
# Recharger la configuration systemd pour prendre en compte le nouveau fichier
systemctl daemon-reload
# Activer le service (démarre au prochain boot du serveur)
systemctl enable fivem-server.service
# Démarrer le service immédiatement
systemctl start fivem-server.service
# Vérifier l'état du daemon
systemctl status fivem-server.service
La commande enable crée un lien symbolique dans le répertoire cible multi-user.target.wants/, ce qui déclenche le démarrage automatique à chaque boot. Si vous omettez enable, le daemon démarrera bien maintenant mais pas après un reboot du serveur VPS ou dédié.
Arrêt propre, backup et maintenance
Un arrêt propre est important avant de lancer des sauvegardes des données de jeu ou une mise à jour. Procédez toujours dans cet ordre : arrêtez le service daemon, lancez vos sauvegardes vers un stockage distant, puis appliquez la mise à jour. Pour stopper temporairement le serveur sans le désactiver au boot :
systemctl stop fivem-server.service
Pour désactiver le démarrage automatique tout en conservant la possibilité de le démarrer manuellement :
systemctl disable fivem-server.service
Pour redémarrer après une mise à jour des configurations :
systemctl restart fivem-server.service
Pour les mises à jour du serveur sans perte de données, consultez notre guide sur la mise à jour d'un serveur de jeu Linux. Concernant les backups, automatisez des exports réguliers de votre répertoire /opt/gameserver vers un stockage externe ou hors site, idéalement avant chaque mise à jour majeure du serveur VPS.
Consulter les logs et diagnostiquer un crash
systemd stocke tous les logs du daemon dans journald. Les commandes essentielles depuis la ligne de commande SSH :
# Afficher les 100 dernières lignes et suivre en temps réel
journalctl -u fivem-server.service -n 100 -f
# Afficher les logs depuis le dernier boot uniquement
journalctl -u fivem-server.service -b
# Afficher les logs entre deux dates
journalctl -u fivem-server.service --since "2026-09-28 18:00" --until "2026-09-28 19:00"
Pour connaître le nombre de redémarrages depuis l'activation du daemon :
systemctl show fivem-server.service -p NRestarts
Pour une analyse approfondie des journaux système du serveur VPS, consultez notre guide sur l'analyse des logs avec journalctl.
Dépannage des problèmes courants
Le service ne démarre pas
Si systemctl status affiche failed, consultez les logs récents du daemon :
journalctl -u fivem-server.service -n 50 --no-pager
Causes fréquentes : chemin ExecStart incorrect, script non exécutable (chmod +x /opt/fivem/run.sh), ou utilisateur gameserver sans droits de lecture sur le répertoire. Vérifiez aussi que le pare-feu (UFW ou nftables) autorise bien le port de jeu sur votre VPS Linux. Un pare-feu mal configuré peut silencieusement bloquer les connexions entrantes sans générer d'erreur côté service. Pour configurer votre pare-feu VPS, consultez notre guide sur l'ouverture des ports avec UFW.
Boucle de redémarrage
Si le service crashe en boucle et que systemctl status affiche start-limit-hit, réinitialisez le compteur de crashes :
systemctl reset-failed fivem-server.service
systemctl start fivem-server.service
Puis analysez la cause racine dans les logs avant de relancer le daemon. Un espace disque plein sur le SSD ou une RAM saturée sont des causes fréquentes de crash en boucle sur un serveur VPS Linux.
Problèmes de permissions
Si le service tourne sous un utilisateur dédié mais que les fichiers de configuration et données appartiennent à root, corrigez les permissions :
chown -R gameserver:gameserver /opt/gameserver
Vérifiez aussi les droits d'exécution sur le script de lancement (ls -la /opt/gameserver/start.sh) et les droits d'écriture sur les répertoires de logs et de données. Une erreur de permissions est souvent la cause principale d'un service qui échoue au démarrage sans message d'erreur explicite.
Aller plus loin
Un service systemd bien configuré résout la majorité des problèmes de disponibilité d'un serveur de jeu hébergé sur un VPS Linux ou serveur dédié. Pour compléter votre infrastructure d'administration :
- Configurez la détection automatique d'un serveur hors service pour recevoir une alerte même quand systemd ne suffit pas (panne réseau, blocage applicatif sans crash, problème d'adresse IP).
- Gérez les sessions persistantes avec tmux pour les commandes administratives qui ne doivent pas être des services daemon.
- Renforcez la sécurité SSH de votre accès admin avec notre guide d'analyse des échecs de connexion SSH.
- Vérifiez l'espace disque SSD disponible régulièrement avec notre guide sur la surveillance de l'espace disque d'un VPS Linux.
Vous souhaitez héberger votre serveur de jeu sur une infrastructure fiable, avec un VPS Linux SSD, un réseau 1 Gbit/s et une disponibilité garantie par SLA ?
Voir les offres VPS Linux ElypseCloud