Un servizio systemd è il modo corretto per avere qualcosa sempre in funzione su Linux: si avvia da solo dopo un riavvio, riparte se va in crash e salva in un log tutto ciò che scrive. L'esempio è un server di Minecraft, ma vale per qualsiasi cosa.
1. Un utente per il server
Meglio che non giri come root: se qualcuno si intrufola attraverso il gioco, non ha il controllo dell'intera macchina.
adduser --disabled-password --gecos "" minecraft
# copia il tuo server in /home/minecraft/servidor e assegnagli i permessi:
chown -R minecraft:minecraft /home/minecraft/servidor
2. Il file del servizio
Crea /etc/systemd/system/minecraft.service:
[Unit]
Description=Server di Minecraft
After=network-online.target
Wants=network-online.target
[Service]
User=minecraft
WorkingDirectory=/home/minecraft/servidor
ExecStart=/usr/bin/java -Xms4G -Xmx4G -jar paper.jar --nogui
Restart=on-failure
RestartSec=10
[Install]
WantedBy=multi-user.target
Sostituisci WorkingDirectory ed ExecStart con la cartella e il comando del tuo server. Usa sempre percorsi completi (which java ti dice quello di Java).
3. Attivalo
systemctl daemon-reload
systemctl enable --now minecraft
enable fa sì che si avvii insieme al VPS; --now lo avvia subito.
Uso quotidiano
systemctl status minecraft # è in funzione?
systemctl restart minecraft # riavviarlo
systemctl stop minecraft # fermarlo
journalctl -u minecraft -f # vedere la sua console in diretta (Ctrl + C per uscire)
E la console del gioco?
Come servizio non puoi scrivere comandi direttamente nella sua console. Per gestirlo usa RCON (Minecraft, Rust, ARK e Palworld ce l'hanno) o i comandi dall'interno del gioco con i permessi di amministratore. Con systemctl stop, Minecraft salva il mondo prima di chiudersi.
Se preferisci avere sempre una console a portata di mano e non ti dispiace avviarlo tu dopo ogni riavvio, forse ti conviene di più screen o tmux.