Usługa systemd to właściwy sposób na to, by coś działało w Linuksie bez przerwy: uruchamia się sama po restarcie, wstaje ponownie po awarii i zapisuje w logu wszystko, co wypisuje program. Przykład dotyczy serwera Minecraft, ale sprawdzi się w każdym przypadku.
1. Użytkownik dla serwera
Lepiej, żeby serwer nie działał jako root: jeśli ktoś włamie się przez grę, nie przejmie kontroli nad całą maszyną.
adduser --disabled-password --gecos "" minecraft
# skopiuj swój serwer do /home/minecraft/serwer i nadaj uprawnienia:
chown -R minecraft:minecraft /home/minecraft/serwer
2. Plik usługi
Utwórz plik /etc/systemd/system/minecraft.service:
[Unit]
Description=Serwer Minecraft
After=network-online.target
Wants=network-online.target
[Service]
User=minecraft
WorkingDirectory=/home/minecraft/serwer
ExecStart=/usr/bin/java -Xms4G -Xmx4G -jar paper.jar --nogui
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
Zmień WorkingDirectory i ExecStart na folder i polecenie Twojego serwera. Zawsze używaj pełnych ścieżek (which java pokaże ścieżkę do Javy).
3. Włącz usługę
systemctl daemon-reload
systemctl enable --now minecraft
enable sprawia, że usługa startuje razem z serwerem VPS; --now uruchamia ją od razu.
Na co dzień
systemctl status minecraft # czy działa?
systemctl restart minecraft # uruchom ponownie
systemctl stop minecraft # zatrzymaj
journalctl -u minecraft -f # podgląd konsoli na żywo (Ctrl + C, aby wyjść)
A konsola gry?
Gdy serwer działa jako usługa, nie możesz wpisywać poleceń bezpośrednio w jego konsoli. Do zarządzania używaj RCON (mają go Minecraft, Rust, ARK i Palworld) albo poleceń w samej grze z uprawnieniami administratora. Po wykonaniu systemctl stop Minecraft zapisuje świat przed zamknięciem.
Jeśli wolisz mieć konsolę zawsze pod ręką i nie przeszkadza Ci samodzielne uruchamianie serwera po każdym restarcie, być może lepiej sprawdzi się screen lub tmux.