Un service systemd est la bonne façon de faire tourner quelque chose en permanence sous Linux : il démarre tout seul après un redémarrage, se relance s'il plante et enregistre tout ce qu'il écrit dans un log. L'exemple est un serveur Minecraft, mais ça marche pour n'importe quoi.
1. Un utilisateur pour le serveur
Mieux vaut qu'il ne tourne pas en root : si quelqu'un s'infiltre par le jeu, il n'a pas le contrôle de toute la machine.
adduser --disabled-password --gecos "" minecraft
# copie ton serveur dans /home/minecraft/serveur et donne-lui les droits :
chown -R minecraft:minecraft /home/minecraft/serveur
2. Le fichier du service
Crée /etc/systemd/system/minecraft.service :
[Unit]
Description=Serveur Minecraft
After=network-online.target
Wants=network-online.target
[Service]
User=minecraft
WorkingDirectory=/home/minecraft/serveur
ExecStart=/usr/bin/java -Xms4G -Xmx4G -jar paper.jar --nogui
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
Remplace WorkingDirectory et ExecStart par le dossier et la commande de ton serveur. Utilise toujours des chemins complets (which java te donne celui de Java).
3. Active-le
systemctl daemon-reload
systemctl enable --now minecraft
enable le fait démarrer avec le VPS ; --now le lance tout de suite.
Au quotidien
systemctl status minecraft # est-ce qu'il tourne ?
systemctl restart minecraft # le redémarrer
systemctl stop minecraft # l'arrêter
journalctl -u minecraft -f # voir sa console en direct (Ctrl + C pour quitter)
Et la console du jeu ?
En tant que service, tu ne peux pas taper de commandes directement dans sa console. Pour l'administrer, utilise le RCON (Minecraft, Rust, ARK et Palworld l'ont) ou les commandes en jeu avec des droits d'administrateur. Lors d'un systemctl stop, Minecraft sauvegarde le monde avant de se fermer.
Si tu préfères garder une console sous la main et que ça ne te dérange pas de le relancer toi-même après chaque redémarrage, screen ou tmux te conviendront peut-être mieux.