Automatyczny start serwera Minecraft: usługa systemd i cronjob
Po restarcie serwer Minecraft ma wstać sam z siebie. Pokazujemy jednostkę usługi systemd jako czystą drogę oraz cronjob z @reboot jako szybką alternatywę.
Chcesz, żeby twój serwer Minecraft po restarcie serwera root sam wracał do sieci, bez logowania się przez SSH? Dobrze trafiłeś.
Pokażemy dwie drogi: jednostkę usługi systemd jako rozwiązanie czyste i zalecane oraz klasyczny cronjob z @reboot jako szybką alternatywę. Oba warianty działają na wszystkich popularnych dystrybucjach Linuksa, a więc na Debianie, Ubuntu, AlmaLinux oraz Rocky Linux.
systemd czy cronjob: która droga jest właściwa?
Cronjob z @reboot da się ustawić w chwilę, ale zna tylko jeden moment: start systemu. Jeśli coś pójdzie wtedy nie tak albo serwer padnie później, nic więcej się nie wydarzy.
Jednostka usługi systemd to droga czysta, która daje kilka przewag:
- Serwer startuje dopiero wtedy, gdy sieć jest naprawdę gotowa, a nie po zgadywanym czasie oczekiwania.
- Po awarii systemd uruchamia serwer ponownie automatycznie.
- Serwerem sterujesz znanymi poleceniami
systemctl start,stop,restartorazstatus. - Komunikaty o błędach trafiają do journala i prześledzisz je poleceniem
journalctl.
Dlatego zalecamy drogę przez systemd. Cronjoba opisujemy niżej jako alternatywę na wypadek, gdyby systemd nie był dostępny.
Przygotowanie: zanotuj polecenie startowe, użytkownika i katalog
Zanim zaczniesz, potrzebujesz trzech informacji ze swojej dotychczasowej instalacji:
- Polecenia startowego z pliku „start.sh”, czyli na przykład
screen -dmS spigot java -Xmx4G -jar spigot.jar - Użytkownika, na którego koncie działa serwer, w przykładzie „spigot”
- Katalogu, w którym leży plik serwera, w przykładzie
/home/spigot/server
Typowa zawartość pliku start.sh wygląda tak:
#To jest tylko przykład! Użyj zawartości własnego pliku start.sh.
screen -S spigot java -Xmx2G -jar spigot.jar
Ważne: na potrzeby automatycznego startu screen -S musi bezwzględnie zmienić się w screen -dmS. Powód: screen -S otwiera sesję interaktywną i oczekuje terminala. Przy starcie systemu terminala nie ma, więc uruchomienie by się nie powiodło. screen -dmS startuje sesję od razu w tle.
Jeśli nie masz jeszcze skonfigurowanego żadnego serwera Minecraft, zacznij od naszego poradnika Instalacja serwera Minecraft na Debianie.
Tworzenie jednostki usługi systemd dla serwera Minecraft
Utworzenie pliku jednostki
Utwórz jako root nowy plik usługi:
nano /etc/systemd/system/minecraft.service
Wpisz do niego poniższą zawartość i dopasuj użytkownika, katalog, pamięć RAM oraz nazwę pliku do własnej instalacji:
[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
Najważniejsze wiersze w skrócie:
AfterorazWantsdbają o to, żeby serwer wystartował dopiero wtedy, gdy sieć jest dostępna.Userustala, na koncie którego użytkownika działa serwer. Nigdy nie uruchamiaj go jako root.WorkingDirectoryto katalog z plikiem serwera. Bez tego wpisu Java nie znajdzie pliku JAR.ExecStopwysyła do sesji screen polecenie „stop”. Dzięki temu serwer porządnie zapisuje świat, zamiast zostać po prostu ubity.Restart=on-failureuruchamia serwer ponownie po awarii, aRestartSecustala czas oczekiwania w sekundach.
Zapisz plik kombinacją „CTRL + X”, potem „Y” i „Enter”.
Aktywacja i uruchomienie usługi
Następnie systemd wczyta nowy plik, włączy autostart i od razu uruchomi serwer:
systemctl daemon-reload
systemctl enable --now minecraft
Aktualny stan sprawdzisz poleceniem:
systemctl status minecraft
Jeśli w wyjściu widnieje „active”, usługa działa. Przy problemach dokładny komunikat błędu znajdziesz w journalu:
journalctl -u minecraft -n 50
Dostęp do konsoli serwera
Serwer nadal działa w sesji screen. Ponieważ należy ona do użytkownika „spigot”, przełącz się najpierw na tego użytkownika, a dopiero potem otwórz konsolę:
su spigot
screen -r spigot
Kombinacją „CTRL + A + D” opuścisz konsolę bez zatrzymywania serwera.
Zatrzymanie i restart serwera
Od tej pory serwerem sterujesz przez systemd:
systemctl stop minecraft
systemctl restart minecraft
Jeśli autostart ma zostać znowu wyłączony, wystarczy:
systemctl disable minecraft
Alternatywa: autostart przez cronjoba z @reboot
Jeśli nie chcesz zakładać jednostki usługi, autostart uzyskasz również przez crontaba danego użytkownika. Otwórz crontaba poleceniem:
export VISUAL=nano; crontab -e
Dopisz swoje polecenie startowe jako ostatni wiersz, poprzedzone przedrostkiem @reboot:
@reboot <zawartość twojego pliku start.sh>
#Tak mniej więcej powinien wyglądać parametr startowy, u ciebie może się różnić w zależności od skryptu startowego.
@reboot screen -dmS <nazwa-screena> java -Xmx<AMOUNT>G -jar <katalog i nazwa pliku serwera Minecraft>.jar
#PRZYKŁAD:
@reboot screen -dmS spigot java -Xmx2G -jar /home/spigot/spigot.jar
Zwróć również tutaj uwagę na to, żeby użyć screen -dmS, a nie screen -S. Jak w ten sam sposób uruchamiać przy starcie serwera dowolne inne aplikacje i skrypty, pokazuje nasz poradnik Automatyczne uruchamianie programów przy starcie serwera.
Test autostartu
Nie zakładaj z góry, że konfiguracja jest poprawna, tylko sprawdź to świadomie. Zrestartuj serwer:
reboot
Odczekaj minutę albo dwie, zaloguj się ponownie przez SSH i sprawdź poleceniem systemctl status minecraft lub screen -ls, czy serwer Minecraft znowu działa. Połącz się dodatkowo klientem gry, żeby mieć pewność, że serwer jest naprawdę osiągalny.
Najczęstsze błędy przy autostarcie
- screen -S zamiast screen -dmS: zdecydowanie najczęstszy błąd. Bez
-dmserwer nie wystartuje przy bootowaniu. - Zły katalog: Java nie znajduje pliku JAR. Sprawdź
WorkingDirectoryalbo podaj w cronjobie pełną ścieżkę do pliku JAR. - Zły użytkownik: jeśli usługa działa jako root, nowo utworzone pliki świata należą potem do roota, a właściwy użytkownik serwera nie może już w nich zapisywać.
- Za mało pamięci RAM: jeśli wartość za
-Xmxjest większa niż wolna pamięć RAM, kernel zakończy proces Javy krótko po starcie.
Najczęstsze pytania
systemd czy cronjob: co jest lepszą drogą?
Dlaczego screen -S trzeba zmienić na screen -dmS?
Jak dostać się do konsoli serwera po automatycznym starcie?
Czy systemd zrestartuje mój serwer również po awarii?
Jak sprawdzić, czy autostart naprawdę działa?
2024-2026 KernelHost GmbH. Wszelkie prawa zastrzeżone. Ten poradnik jest chroniony prawem autorskim. Publikowanie go w innych serwisach, w całości, we fragmentach lub w zmienionej formie, wymaga naszej pisemnej zgody. Cytaty z podaniem źródła i z linkiem są jak najbardziej mile widziane.

