Avviare automaticamente un server Minecraft: service unit systemd e cron job
Dopo un riavvio del server, il server Minecraft deve tornare a girare da solo. Ti mostriamo la service unit systemd come strada pulita e il cron job con @reboot come alternativa.
Vuoi che il tuo server Minecraft torni online da solo dopo un riavvio del server root, senza doverti collegare via SSH? Allora sei nel posto giusto.
Ti mostriamo due strade: la service unit systemd, la soluzione pulita e consigliata, e il classico cron job con @reboot come alternativa rapida. Entrambe le varianti funzionano su tutte le distribuzioni Linux più diffuse, quindi su Debian, Ubuntu, AlmaLinux e Rocky Linux.
systemd o cron job: qual è la strada giusta?
Un cron job con @reboot si configura in fretta, ma conosce un solo momento: l'avvio del sistema. Se proprio lì qualcosa va storto, oppure se il server va in crash più tardi, non succede più nulla.
Una service unit systemd è la strada pulita e porta con sé diversi vantaggi:
- Il server parte solo quando la rete è davvero pronta, invece che dopo un tempo di attesa stimato a occhio.
- Dopo un crash, systemd riavvia il server automaticamente.
- Gestisci il server con i comandi consueti
systemctl start,stop,restartestatus. - I messaggi di errore finiscono nel journal e restano consultabili con
journalctl.
Per questo consigliamo la strada systemd. Il cron job lo descriviamo più avanti, come alternativa per i casi in cui systemd non sia disponibile.
Preparazione: annota comando di avvio, utente e directory
Prima di iniziare ti servono tre informazioni ricavate dalla tua installazione esistente:
- Il comando di avvio contenuto nel tuo file "start.sh", per esempio
screen -dmS spigot java -Xmx4G -jar spigot.jar - L'utente con cui gira il server, nell'esempio "spigot"
- La directory in cui si trova il file del server, nell'esempio
/home/spigot/server
Il contenuto tipico di uno start.sh è questo:
#Questo è soltanto un esempio! Usa il contenuto del tuo start.sh.
screen -S spigot java -Xmx2G -jar spigot.jar
Importante: per l'avvio automatico screen -S deve assolutamente diventare screen -dmS. Il motivo: screen -S apre una sessione interattiva e si aspetta un terminale. All'avvio del sistema non c'è alcun terminale, quindi l'avvio fallirebbe. screen -dmS invece avvia la sessione direttamente in background.
Se non hai ancora installato nessun server Minecraft, parti prima dalla nostra guida Installare un server Minecraft su Debian.
Creare una service unit systemd per il server Minecraft
Creare il file della unit
Come root crea un nuovo file di servizio:
nano /etc/systemd/system/minecraft.service
Inserisci il contenuto seguente e adatta utente, directory, RAM e nome del file alla tua installazione:
[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
Le righe più importanti in breve:
AftereWantsfanno in modo che il server parta solo quando la rete è disponibile.Userstabilisce con quale utente gira il server. Non farlo girare mai come root.WorkingDirectoryè la directory che contiene il file del server. Senza questa indicazione Java non trova il file JAR.ExecStopinvia il comando "stop" alla sessione screen. In questo modo il server salva il mondo in modo pulito, invece di essere terminato di forza.Restart=on-failureriavvia il server automaticamente dopo un crash,RestartSecfissa il tempo di attesa in secondi.
Salva il file con "CTRL + X", poi "Y" e "Invio".
Attivare e avviare il servizio
Dopodiché systemd rilegge il nuovo file, attiva l'avvio automatico e lancia subito il server:
systemctl daemon-reload
systemctl enable --now minecraft
Lo stato attuale lo verifichi con:
systemctl status minecraft
Se l'output mostra "active", il servizio è in funzione. In caso di problemi il journal fornisce il messaggio di errore esatto:
journalctl -u minecraft -n 50
Raggiungere la console del server
Il server continua a girare in una sessione screen. Poiché questa appartiene all'utente "spigot", passa prima a quell'utente e apri poi la console:
su spigot
screen -r spigot
Con "CTRL + A + D" esci di nuovo dalla console senza fermare il server.
Fermare e riavviare il server
Da adesso in poi gestisci il server tramite systemd:
systemctl stop minecraft
systemctl restart minecraft
Se vuoi disattivare di nuovo l'avvio automatico, basta:
systemctl disable minecraft
Alternativa: avvio automatico con un cron job e @reboot
Se non vuoi creare una service unit, ottieni l'avvio automatico anche tramite la crontab del rispettivo utente. Apri la crontab con:
export VISUAL=nano; crontab -e
Aggiungi il tuo comando di avvio come ultima riga, preceduto dal prefisso @reboot:
@reboot <contenuto del tuo file start.sh>
#Questo è più o meno l'aspetto che dovrebbe avere il parametro di avvio, può differire dal tuo script di avvio.
@reboot screen -dmS <nome-screen> java -Xmx<AMOUNT>G -jar <directory e nome del file del server Minecraft>.jar
#ESEMPIO:
@reboot screen -dmS spigot java -Xmx2G -jar /home/spigot/spigot.jar
Anche qui fai attenzione a usare screen -dmS e non screen -S. Come far partire allo stesso modo altre applicazioni e script all'avvio del server te lo mostra la nostra guida Eseguire programmi automaticamente all'avvio del server.
Testare l'avvio automatico
Non dare per scontato che la configurazione sia corretta, mettila alla prova una volta di proposito. Riavvia il server:
reboot
Aspetta uno o due minuti, collegati di nuovo via SSH e controlla con systemctl status minecraft oppure con screen -ls se il server Minecraft è di nuovo in funzione. Collegati inoltre con il client di gioco, così sei sicuro che il server sia davvero raggiungibile.
Errori frequenti con l'avvio automatico
- screen -S invece di screen -dmS: di gran lunga l'errore più frequente. Senza
-dmil server non parte al boot. - Directory sbagliata: Java non trova il file JAR. Controlla
WorkingDirectoryoppure indica nel cron job il percorso completo del file JAR. - Utente sbagliato: se il servizio gira come root, i file del mondo appena creati appartengono poi a root e l'utente previsto per il server non può più scriverci.
- RAM insufficiente: se il valore dopo
-Xmxsupera la RAM libera, il kernel termina il processo Java poco dopo l'avvio.
Domande frequenti
systemd o cron job: qual è la strada migliore?
Perché screen -S va cambiato in screen -dmS?
Come raggiungo la console del server dopo un avvio automatico?
systemd riavvia il mio server anche dopo un crash?
Come verifico che l'avvio automatico funzioni davvero?
2024-2026 KernelHost GmbH. Tutti i diritti riservati. Questa guida è protetta dal diritto d'autore. La ripubblicazione su altri siti web, anche parziale o in forma modificata, non è consentita senza il nostro consenso scritto. Le citazioni con indicazione della fonte e un link sono le benvenute.

