Minecraft-server automatisch starten: systemd-service en cronjob

Gepubliceerd op Bijgewerkt op 5 min leestijd

Na een herstart van de server moet de Minecraft-server vanzelf weer draaien. Wij laten de systemd-service-unit zien als nette aanpak en de cronjob met @reboot als alternatief.

Moet uw Minecraft-server na een herstart van de rootserver vanzelf weer online komen, zonder dat u via SSH hoeft in te loggen? Dan bent u hier aan het juiste adres.

Wij laten u twee manieren zien: de systemd-service-unit als nette en aanbevolen oplossing en de klassieke cronjob met @reboot als snel alternatief. Beide varianten werken op alle gangbare Linux-distributies, dus onder Debian, Ubuntu, AlmaLinux en Rocky Linux.

systemd of cronjob: welke manier is de juiste?

Een cronjob met @reboot is snel ingesteld, maar kent slechts één moment: de systeemstart. Gaat daarbij iets mis of crasht de server later alsnog, dan gebeurt er verder niets.

Een systemd-service-unit is de nette aanpak en biedt meerdere voordelen:

  • De server start pas wanneer het netwerk echt beschikbaar is, in plaats van na een geschatte wachttijd.
  • Na een crash start systemd de server automatisch opnieuw op.
  • U bedient de server met de vertrouwde commando's systemctl start, stop, restart en status.
  • Foutmeldingen belanden in het journal en zijn met journalctl na te lezen.

Wij raden daarom de systemd-aanpak aan. De cronjob beschrijven wij verderop als alternatief voor situaties waarin systemd niet beschikbaar is.

Voorbereiding: startcommando, gebruiker en map noteren

Voordat u begint, hebt u drie gegevens uit uw bestaande installatie nodig:

  • Het startcommando uit uw bestand "start.sh", dus bijvoorbeeld screen -dmS spigot java -Xmx4G -jar spigot.jar
  • De gebruiker waaronder de server draait, in het voorbeeld "spigot"
  • De map waarin het serverbestand staat, in het voorbeeld /home/spigot/server

Een typische inhoud van een start.sh ziet er zo uit:

#Dit is slechts een voorbeeld! Gebruik de inhoud van uw eigen start.sh.

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

Belangrijk: voor de automatische start moet screen -S beslist screen -dmS worden. De reden: screen -S opent een interactieve sessie en verwacht een terminal. Bij de systeemstart is er geen terminal, dus zou het starten mislukken. screen -dmS start de sessie daarentegen meteen op de achtergrond.

Hebt u nog helemaal geen Minecraft-server ingericht, dan helpt onze handleiding Minecraft-server op Debian installeren u eerst verder.

systemd-service-unit voor de Minecraft-server aanmaken

Unit-bestand aanmaken

Maak als root een nieuw servicebestand aan:

nano /etc/systemd/system/minecraft.service

Voer de volgende inhoud in en pas gebruiker, map, werkgeheugen en bestandsnaam aan uw installatie aan:

[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

De belangrijkste regels op een rij:

  • After en Wants zorgen ervoor dat de server pas start wanneer het netwerk beschikbaar is.
  • User bepaalt onder welke gebruiker de server draait. Laat hem nooit als root draaien.
  • WorkingDirectory is de map met het serverbestand. Zonder deze opgave vindt Java het JAR-bestand niet.
  • ExecStop stuurt het commando "stop" naar de screen-sessie. Daardoor slaat de server de wereld netjes op in plaats van zomaar afgebroken te worden.
  • Restart=on-failure start de server na een crash automatisch opnieuw op, RestartSec bepaalt de wachttijd in seconden.

Sla het bestand op met "CTRL + X", daarna "Y" en "Enter".

Service activeren en starten

Daarna leest systemd het nieuwe bestand in, activeert de autostart en start de server meteen:

systemctl daemon-reload
systemctl enable --now minecraft

De actuele status controleert u met:

systemctl status minecraft

Staat er "active" in de uitvoer, dan draait de service. Bij problemen levert het journal de precieze foutmelding:

journalctl -u minecraft -n 50

Serverconsole bereiken

De server draait nog steeds in een screen-sessie. Omdat die van de gebruiker "spigot" is, wisselt u eerst naar deze gebruiker en opent u daarna de console:

su spigot
screen -r spigot

Met "CTRL + A + D" verlaat u de console weer, zonder de server te stoppen.

Server stoppen en opnieuw starten

Vanaf nu bestuurt u de server via systemd:

systemctl stop minecraft
systemctl restart minecraft

Wilt u de autostart weer uitschakelen, dan volstaat:

systemctl disable minecraft

Alternatief: autostart via een cronjob met @reboot

Wilt u geen service-unit aanmaken, dan bereikt u de autostart ook via de crontab van de betreffende gebruiker. Open de crontab met:

export VISUAL=nano; crontab -e

Voeg uw startcommando als laatste regel toe met het voorvoegsel @reboot:

@reboot <inhoud van uw start.sh bestand>

#Zo zou de startparameter er ongeveer uit moeten zien, dit kan van uw eigen startscript afwijken.

@reboot screen -dmS <SCREEN-NAAM> java -Xmx<AMOUNT>G -jar <map en naam van het Minecraft-serverbestand>.jar


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

Let er ook hier op dat screen -dmS wordt gebruikt en niet screen -S. Hoe u willekeurige andere programma's en scripts op dezelfde manier bij de serverstart laat meestarten, leest u in onze handleiding Programma's automatisch uitvoeren bij de serverstart.

Autostart testen

Vertrouw er niet blindelings op dat de configuratie klopt, maar test hem bewust een keer. Start de server opnieuw op:

reboot

Wacht een tot twee minuten, log opnieuw in via SSH en controleer met systemctl status minecraft of met screen -ls of de Minecraft-server weer draait. Maak daarnaast verbinding met de spelclient, zodat u zeker weet dat de server ook werkelijk bereikbaar is.

Veelgemaakte fouten bij de autostart

  • screen -S in plaats van screen -dmS: veruit de meest voorkomende fout. Zonder -dm start de server tijdens het booten niet.
  • Verkeerde map: Java vindt het JAR-bestand niet. Controleer WorkingDirectory of geef in de cronjob het volledige pad naar het JAR-bestand op.
  • Verkeerde gebruiker: draait de service als root, dan zijn de nieuw aangemaakte wereldbestanden daarna eigendom van root en kan de eigenlijke servergebruiker ze niet meer beschrijven.
  • Te weinig werkgeheugen: is de waarde achter -Xmx groter dan het vrije werkgeheugen, dan beëindigt de kernel het Java-proces kort na de start weer.

Veelgestelde vragen

systemd of cronjob: wat is de betere manier?
Een systemd-service-unit is de nettere oplossing. Die start de server pas wanneer het netwerk beschikbaar is, start hem na een crash automatisch opnieuw op en laat zich bedienen met systemctl start, stop en status. Een cronjob met @reboot biedt geen van deze functies.
Waarom moet screen -S in screen -dmS worden veranderd?
screen -S opent een interactieve sessie en verwacht een terminal. Bij de systeemstart is er geen terminal, daarom mislukt het starten. screen -dmS start de sessie op de achtergrond en is daarmee de juiste variant voor de autostart.
Hoe bereik ik de serverconsole na een automatische start?
Log eerst in als de gebruiker waaronder de service draait en open daarna de sessie met screen -r. Een screen-sessie hoort altijd alleen bij de gebruiker die haar heeft gestart.
Start systemd mijn server ook na een crash opnieuw op?
Ja, mits u Restart=on-failure in het unit-bestand instelt. systemd start de server dan opnieuw op na de wachttijd die onder RestartSec is opgegeven.
Hoe controleer ik of de autostart echt werkt?
Start de server bewust een keer opnieuw op met reboot en controleer daarna met systemctl status minecraft of de service draait. Bij fouten toont journalctl -u minecraft de precieze melding.

Minecraft-server Autostart systemd Cronjobs Crontabs Linux Gameserver Debian