Démarrer automatiquement un serveur Minecraft : service systemd et tâche cron

Publié le Mis à jour le 6 min de lecture

Après un redémarrage du serveur, votre serveur Minecraft doit repartir tout seul. Nous montrons l'unité de service systemd comme voie propre et la tâche cron avec @reboot comme alternative.

Vous voulez que votre serveur Minecraft revienne en ligne tout seul après un redémarrage du serveur root, sans avoir à vous connecter en SSH ? Vous êtes au bon endroit.

Nous vous montrons deux méthodes : l'unité de service systemd, la solution propre et recommandée, ainsi que la classique tâche cron avec @reboot comme alternative rapide. Les deux variantes fonctionnent sur toutes les distributions Linux courantes, donc sous Debian, Ubuntu, AlmaLinux et Rocky Linux.

systemd ou tâche cron : quelle est la bonne méthode ?

Une tâche cron avec @reboot se met en place rapidement, mais elle ne connaît qu'un seul moment : le démarrage du système. Si quelque chose se passe mal à cet instant, ou si le serveur plante plus tard, rien ne se produit.

Une unité de service systemd est la voie propre et apporte plusieurs avantages :

  • Le serveur ne démarre que lorsque le réseau est réellement prêt, au lieu d'attendre un délai estimé au hasard.
  • Après un plantage, systemd redémarre le serveur automatiquement.
  • Vous pilotez le serveur avec les commandes habituelles systemctl start, stop, restart et status.
  • Les messages d'erreur arrivent dans le journal et restent consultables avec journalctl.

Nous recommandons donc la méthode systemd. Nous décrivons la tâche cron plus bas, comme alternative pour les cas où systemd n'est pas disponible.

Préparation : noter la commande de démarrage, l'utilisateur et le répertoire

Avant de vous lancer, vous avez besoin de trois informations issues de votre installation existante :

  • La commande de démarrage contenue dans votre fichier « start.sh », par exemple screen -dmS spigot java -Xmx4G -jar spigot.jar
  • L'utilisateur sous lequel le serveur tourne, ici « spigot »
  • Le répertoire dans lequel se trouve le fichier du serveur, ici /home/spigot/server

Le contenu typique d'un start.sh ressemble à ceci :

#Ceci n'est qu'un exemple ! Utilisez le contenu de votre propre start.sh.

screen -S spigot java -Xmx2G -jar spigot.jar

Important : pour le démarrage automatique, screen -S doit impérativement devenir screen -dmS. La raison : screen -S ouvre une session interactive et attend un terminal. Au démarrage du système, il n'y a pas de terminal, le lancement échouerait donc. screen -dmS démarre au contraire la session directement en arrière-plan.

Si vous n'avez pas encore installé de serveur Minecraft, commencez par notre tutoriel Installer un serveur Minecraft sur Debian.

Créer une unité de service systemd pour le serveur Minecraft

Créer le fichier de l'unité

Créez un nouveau fichier de service en tant que root :

nano /etc/systemd/system/minecraft.service

Saisissez le contenu suivant et adaptez l'utilisateur, le répertoire, la RAM et le nom du fichier à votre installation :

[Unit]
Description=Minecraft-Server
After=network-online.target
Wants=network-online.target

[Service]
Type=forking
User=spigot
WorkingDirectory=/home/spigot/server
ExecStart=/usr/bin/screen -dmS spigot java -Xmx4G -jar spigot.jar
ExecStop=/usr/bin/screen -S spigot -X stuff "stop\n"
Restart=on-failure
RestartSec=15

[Install]
WantedBy=multi-user.target

Les lignes les plus importantes en un coup d'œil :

  • After et Wants garantissent que le serveur ne démarre qu'une fois le réseau disponible.
  • User définit sous quel utilisateur le serveur tourne. Ne l'exploitez jamais en tant que root.
  • WorkingDirectory est le répertoire qui contient le fichier du serveur. Sans cette indication, Java ne trouve pas le fichier JAR.
  • ExecStop envoie la commande « stop » à la session screen. Le serveur enregistre ainsi proprement le monde au lieu d'être tué brutalement.
  • Restart=on-failure relance automatiquement le serveur après un plantage, RestartSec fixe le délai d'attente en secondes.

Enregistrez le fichier avec « CTRL + X », puis « Y » et « Entrée ».

Activer et démarrer le service

systemd relit ensuite le nouveau fichier, active le démarrage automatique et lance le serveur immédiatement :

systemctl daemon-reload
systemctl enable --now minecraft

Vous vérifiez l'état actuel avec :

systemctl status minecraft

Si la sortie affiche « active », le service tourne. En cas de problème, le journal fournit le message d'erreur exact :

journalctl -u minecraft -n 50

Accéder à la console du serveur

Le serveur continue de tourner dans une session screen. Comme celle-ci appartient à l'utilisateur « spigot », passez d'abord sur cet utilisateur, puis ouvrez la console :

su spigot
screen -r spigot

Avec « CTRL + A + D », vous quittez la console sans arrêter le serveur.

Arrêter et redémarrer le serveur

Désormais, vous pilotez le serveur via systemd :

systemctl stop minecraft
systemctl restart minecraft

Pour désactiver de nouveau le démarrage automatique, il suffit de :

systemctl disable minecraft

Alternative : le démarrage automatique par une tâche cron avec @reboot

Si vous ne souhaitez pas créer d'unité de service, vous obtenez aussi le démarrage automatique par la crontab de l'utilisateur concerné. Ouvrez la crontab avec :

export VISUAL=nano; crontab -e

Ajoutez votre commande de démarrage en dernière ligne, précédée du préfixe @reboot :

@reboot <contenu de votre fichier start.sh>

#Voici à quoi devrait ressembler le paramètre de démarrage, cela peut différer de votre propre script de lancement.

@reboot screen -dmS <nom-du-screen> java -Xmx<AMOUNT>G -jar <répertoire et nom du fichier du serveur Minecraft>.jar


#EXEMPLE :
@reboot screen -dmS spigot java -Xmx2G -jar /home/spigot/spigot.jar

Veillez ici aussi à utiliser screen -dmS et non screen -S. Pour lancer par la même méthode d'autres applications et scripts au démarrage du serveur, consultez notre tutoriel Exécuter automatiquement des programmes au démarrage du serveur.

Tester le démarrage automatique

Ne partez pas du principe que la configuration est correcte, testez-la volontairement une fois. Redémarrez le serveur :

reboot

Patientez une à deux minutes, reconnectez-vous en SSH et vérifiez avec systemctl status minecraft ou avec screen -ls que le serveur Minecraft tourne de nouveau. Connectez-vous en plus depuis le client de jeu, afin d'être certain que le serveur est réellement joignable.

Erreurs fréquentes lors du démarrage automatique

  • screen -S au lieu de screen -dmS : de loin l'erreur la plus fréquente. Sans -dm, le serveur ne démarre pas au boot.
  • Mauvais répertoire : Java ne trouve pas le fichier JAR. Vérifiez WorkingDirectory ou indiquez le chemin complet vers le fichier JAR dans la tâche cron.
  • Mauvais utilisateur : si le service tourne en tant que root, les fichiers du monde nouvellement créés appartiennent ensuite à root, et l'utilisateur prévu pour le serveur ne peut plus les écrire.
  • RAM insuffisante : si la valeur derrière -Xmx dépasse la mémoire libre, le noyau met fin au processus Java peu après son lancement.

Questions fréquentes

systemd ou tâche cron : quelle est la meilleure méthode ?
Une unité de service systemd est la solution la plus propre. Elle ne démarre le serveur qu'une fois le réseau prêt, le relance automatiquement après un plantage et se pilote avec systemctl start, stop et status. Une tâche cron avec @reboot n'offre aucune de ces fonctions.
Pourquoi faut-il remplacer screen -S par screen -dmS ?
screen -S ouvre une session interactive et attend un terminal. Au démarrage du système, il n'y a pas de terminal, le lancement échoue donc. screen -dmS démarre la session en arrière-plan et constitue ainsi la bonne variante pour le démarrage automatique.
Comment accéder à la console du serveur après un démarrage automatique ?
Connectez-vous d'abord en tant que l'utilisateur sous lequel le service tourne, puis ouvrez la session avec screen -r. Une session screen appartient toujours au seul utilisateur qui l'a lancée.
systemd relance-t-il aussi mon serveur après un plantage ?
Oui, à condition de définir Restart=on-failure dans le fichier de l'unité. systemd relance alors le serveur après le délai d'attente indiqué sous RestartSec.
Comment vérifier que le démarrage automatique fonctionne vraiment ?
Redémarrez volontairement le serveur une fois avec reboot, puis contrôlez avec systemctl status minecraft que le service tourne. En cas d'erreur, journalctl -u minecraft affiche le message exact.

Serveur Minecraft Démarrage automatique systemd Tâches cron Crontab Linux Serveurs de jeu Debian