Een systemd-service is de juiste manier om iets in Linux altijd te laten draaien: hij start vanzelf na een herstart, komt weer op als hij crasht en schrijft alles wat hij uitvoert naar een log. Het voorbeeld is een Minecraft-server, maar het werkt voor alles.
1. Een gebruiker voor de server
Laat hem liever niet als root draaien: dringt iemand via de game binnen, dan heeft die niet meteen de controle over de hele machine.
adduser --disabled-password --gecos "" minecraft
# kopieer je server naar /home/minecraft/server en geef de juiste rechten:
chown -R minecraft:minecraft /home/minecraft/server
2. Het servicebestand
Maak /etc/systemd/system/minecraft.service aan:
[Unit]
Description=Minecraft-server
After=network-online.target
Wants=network-online.target
[Service]
User=minecraft
WorkingDirectory=/home/minecraft/server
ExecStart=/usr/bin/java -Xms4G -Xmx4G -jar paper.jar --nogui
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
Vervang WorkingDirectory en ExecStart door de map en het commando van je server. Gebruik altijd volledige paden (which java geeft je het pad van Java).
3. Schakel hem in
systemctl daemon-reload
systemctl enable --now minecraft
Met enable start hij samen met de VPS op; --now start hem meteen.
Dagelijks gebruik
systemctl status minecraft # draait hij?
systemctl restart minecraft # herstarten
systemctl stop minecraft # stoppen
journalctl -u minecraft -f # zijn console live volgen (Ctrl + C om eruit te gaan)
En de console van de game?
Als service kun je niet rechtstreeks commando's in zijn console typen. Beheer hem via RCON (Minecraft, Rust, ARK en Palworld hebben het) of met commando's vanuit de game zelf, met beheerdersrechten. Bij systemctl stop slaat Minecraft de wereld op voordat hij afsluit.
Wil je liever een console bij de hand houden en vind je het niet erg om hem na elke herstart zelf te starten, dan past screen of tmux misschien beter bij je.