Automatyczny restart serwera minecraft

Pytania i problemy
minecraft, zarządzanie
zeetg
zeetg

Cześć. Chciałbym na serwer dodać automatyczny restart o godzinie 4:30, ale niestety po wielu próbach nadal mi się nie udało. Mam stworzony skrypt restartujący i działa jeśli go wykonuje samodzielnie, ale gdy go dodaje do crona, aby uruchamiał się o wybranej godzinie to nie jest wykonywany o żadnej porze. Robiłem już bardzo wiele kombinacji skryptu w crontabie, ale bez skutku. Potrzebne informacje podaję niżej, jeśli coś źle robię to proszę o pomoc.

SKRYPT RESTARTUJĄCY

#!/bin/bash
screen -S server -p 0 -X stuff "stop$(echo '\r')"
sleep 5
cd /home/minecraft/server
sh start.sh

SKRYPTY KTÓRYCH PRÓBOWAŁEM UŻYĆ W CRONIE

30 4 * * * /home/restart.sh >/dev/null 2>&1

30 4 * * * /home/minecraft/restart.sh >/dev/null 2>&1

30 4 * * * /home/minecraft/server/restart.sh >/dev/null 2>&1

LOKALIZACJA PLIKU

/home/minecraft/server

Nieznajomy11
Nieznajomy11 Moderator forum.lvlup.pro

Cron ma wiele znacznych różnic w porównaniu do zwykłego wykonywania w terminalu, odpala się np. na własnych zmiennych środowiskowych. Może tam nie być czegoś takiego jak screen. Podaj pełną ścieżkę do pliku. Powinieneś ją znaleźć wykonując poniższą komendę:

which screen

Ogólnie to raczej nie zalecałbym restartowania serwerów w ten sposób (jest bardzo mocno zależny środowiskowo i wymaga dodatkowego setupu), tylko raczej skupił się na jakiejś niedużej wtyczce, która się tym zajmie.

zeetg:

stop$(echo '\r')

Dodatkowo twój sposób wykonywania komendy wydaje się być trochę hacky. Wystarczyłoby pewnie użyć stop^M, mniej potencjalnych problemów oraz czytelniejszy skrypt.

zeetg
zeetg

Skrypt po edycji powinien wyglądać w ten sposób czy coś jeszcze zmienić? Po użyciu komendy, którą podałeś pokazuje mi się /usr/bin/screen, czy powinienem to gdzieś wpisać/podmienić?

#!/bin/bash
screen -S skyblock -p 0 -X stuff "stop^M"
sleep 5
cd /home/minecraft/server
sh start.sh
Nieznajomy11
Nieznajomy11 Moderator forum.lvlup.pro

Zamiast:

screen -S skyblock -p 0 -X stuff "stop^M"

Użyj:

/usr/bin/screen -S skyblock -p 0 -X stuff "stop^M"
zeetg
zeetg

Obecnie skrypt prezentuje się tak:

#!/bin/bash
/usr/bin/screen -S server -p 0 -X stuff "stop^M"
sleep 5
cd /home/minecraft/server
sh start.sh

Ale niestety restart dalej się nie wykonuje, może dodaje złe skrypty do crona? Próbowałem z każdym podanym przeze mnie wyżej.

zeetg
zeetg

Dodam tylko jeszcze, że po wpisaniu crontab -l skrypty są dodane i powinny działać, ale ciągle nie uruchamiają się z niewiadomych mi przyczyn.

Kamil02167
Kamil02167

Ja osobiście korzystałem ze skryptu z anglojęzycznego forum. https://www.minecraftforum.net/forums/support/server-support-and/1917504-auto-restart-script-linux-bukkit-maintenance-cron Z pewnością mogę polecić 😉

zeetg
zeetg

Z tego poradnika również korzystałem, ale jak już wyżej napisałem to wszystko robię jak jest opisane, ale po prostu restart nie jest wykonywany.

zeetg
zeetg

Czytałeś w ogóle co pisałem wyżej? Bo już o tym mówiłem. Tak, próbowałem i ręcznie działa, ale crontab nie wykonuje po prostu skryptu.

KMatuszak
KMatuszak Weteran

zeetg:

SKRYPTY KTÓRYCH PRÓBOWAŁEM UŻYĆ W CRONIE

30 4 * * * /home/restart.sh >/dev/null 2>&1

30 4 * * * /home/minecraft/restart.sh >/dev/null 2>&1

30 4 * * * /home/minecraft/server/restart.sh >/dev/null 2>&1

to nie jest prawidłowy sposób uruchamiania skryptu poprzez cron spróbuj wpisać bash przed lokalizacją do skryptu oraz usuń zbędną końcówkę:

30 4 * * * bash /home/restart.sh

30 4 * * * bash /home/minecraft/restart.sh

30 4 * * * bash /home/minecraft/server/restart.sh

EDIT: napisałem poradnik na ten temat, warto zapoznać się 😉 https://lvlup.rok.ovh/t/jak-korzystac-z-crona-automatyczne-wykonywanie-codziennych-czynnosci/15700

zeetg
zeetg

Próbowałem i dalej nie działa. Chciałem też sprawdzić czy cron wykona inny skrypt, który tylko wysyła ogłoszenie na serwerze, ale on też nie jest wykonywany, ręcznie działa.

KMatuszak
KMatuszak Weteran

sprawdź czy w ogóle działa ci cron :woman_shrugging:

zeetg
zeetg

W jaki sposób?

KMatuszak
KMatuszak Weteran

na przykład zapoznaj się z poradnikiem który podesłałem wyżej, i powtórz kroki opisane w nim.

zeetg
zeetg

Zrobiłem wszystkie kroki pokazane w poradniku, ale skrypty dalej nie są wykonywane przez crona.

KMatuszak
KMatuszak Weteran

jesteś pewien że zrobiłeś wszystko zgodnie z poradnikiem? jeżeli tak to zalecam skopiowanie danych i wykonanie reinstalacji, wygląda to na uszkodzony system.

zeetg
zeetg

Nie sądzę żeby to pomogło. Próbowałem nawet na innym nowo zakupionym VPS, ale bez skutku.

KMatuszak
KMatuszak Weteran

w takim razie robisz coś źle. zachęcam do ponownego zapoznania się z poradnikiem 🙂

zeetg
zeetg

Przetestowałem opcję, która wykonuje skrypt co minutę i ona działa, ale problem w tym, że potrzebuję działania skryptu o wyznaczonej godzinie.

KMatuszak
KMatuszak Weteran

zeetg:

Przetestowałem opcję, która wykonuje skrypt co minutę i ona działa

🎉

zeetg:

potrzebuję działania skryptu o wyznaczonej godzinie.

to również jest opisane w poradniku :thinking: masz dobrą godzinę na serwerze?

zeetg
zeetg

Wiem, że jest to tam opisane, ale właśnie ona mi nie działa, a opcja wykonywania co np minutę już tak. Nie za bardzo rozumiem pytanie?

KMatuszak
KMatuszak Weteran

zapytałem czy w systemie na serwerze ustawiona jest prawidłowa godzina 😅

możesz to sprawdzić komendą bodajże date.

zeetg
zeetg

image|228x14

KMatuszak
KMatuszak Weteran

a więc tutaj jest problem 🙂

prawidłową godzinę możesz ustawić przy pomocy komendy dpkg-reconfigure tzdata

musisz też ponownie uruchomić system aby zastosować zmiany

zeetg
zeetg

Jest już krok do przodu, bo skrypt w połowie działa. W połowie dlatego, że serwer się wyłącza, ale się nie włącza. Czy to możliwe, że nie dodałem jakiegoś uprawnienia?

KMatuszak
KMatuszak Weteran

mógłbyś pokazać zawartość skryptu który jest uruchamiany przez crona, oraz skryptu startowego serwera?

zeetg
zeetg

SKRYPT RESTARTUJĄCY

#!/bin/bash
/usr/bin/screen -S server -p 0 -X stuff "stop^M"
sleep 5
cd /home/minecraft/server
sh start.sh

SKRYPT STARTUJĄCY

screen -S server java -Xms1G -Xmx1G -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1NewSizePercent=30 -XX:G1MaxNewSizePercent=40 -XX:G1HeapRegionSize=8M -XX:G1ReservePercent=20 -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=15 -XX:G1MixedGCLiveThresholdPercent=90 -XX:G1RSetUpdatingPauseTimePercent=5 -XX:SurvivorRatio=32 -XX:+PerfDisableSharedMem -XX:MaxTenuringThreshold=1 -Dusing.aikars.flags=https://mcflags.emc.gs -Daikars.new.flags=true -jar silnik.jar nogui

KMatuszak
KMatuszak Weteran

zeetg:

sh start.sh

podmień to na bash start.sh

zeetg:

screen -S server java a to na /usr/bin/screen -S server java

oraz na początku pliku startowego dodaj #!/bin/bash

zeetg
zeetg

Nie pomogło. Serwer dalej się nie włącza.

KMatuszak
KMatuszak Weteran

a spróbuj jeszcze w komendzie startowej podmienić screen -S server na screen -dmS server

zeetg
zeetg

Podziałało, bardzo dziękuję za pomoc ;)

system
system

Ten temat został automatycznie zamknięty 32 dni po ostatnim wpisie. Tworzenie nowych odpowiedzi nie jest już możliwe.