Automatyczny restart serwera minecraft

zeetg | 2020-08-09 20:44:21 UTC | #1

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

1
2
3
4
5
#!/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 | 2020-08-08 04:08:01 UTC | #2

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.

[quote=”zeetg, post:1, topic:15650”]
stop$(echo '\r')
[/quote]

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 | 2020-08-08 18:40:36 UTC | #3

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ć?

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

Nieznajomy11 | 2020-08-09 00:02:50 UTC | #4

Zamiast:

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

Użyj:

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

zeetg | 2020-08-09 00:44:49 UTC | #5

Obecnie skrypt prezentuje się tak:

1
2
3
4
5
#!/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 | 2020-08-10 01:07:22 UTC | #6

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 | 2020-08-10 18:24:41 UTC | #7

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ć :wink:


zeetg | 2020-08-10 20:32:34 UTC | #8

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 | 2020-08-11 01:58:15 UTC | #10

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 | 2020-08-11 09:58:17 UTC | #11

[quote=”zeetg, post:1, topic:15650”]
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

[/quote]

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ę :wink:
https://forum.lvlup.pro/t/jak-korzystac-z-crona-automatyczne-wykonywanie-codziennych-czynnosci/15700


zeetg | 2020-08-11 17:25:30 UTC | #12

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 | 2020-08-11 17:36:31 UTC | #13

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


zeetg | 2020-08-11 17:41:48 UTC | #14

W jaki sposób?


KMatuszak | 2020-08-11 17:42:29 UTC | #15

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


zeetg | 2020-08-11 18:01:50 UTC | #16

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


KMatuszak | 2020-08-11 18:04:08 UTC | #17

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 | 2020-08-11 18:46:39 UTC | #18

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


KMatuszak | 2020-08-11 18:47:14 UTC | #19

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


zeetg | 2020-08-11 19:18:14 UTC | #20

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 | 2020-08-11 19:19:41 UTC | #21

[quote=”zeetg, post:20, topic:15650”]
Przetestowałem opcję, która wykonuje skrypt co minutę i ona działa
[/quote]

:tada:

[quote=”zeetg, post:20, topic:15650”]
potrzebuję działania skryptu o wyznaczonej godzinie.
[/quote]

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


zeetg | 2020-08-11 19:21:04 UTC | #22

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 | 2020-08-11 19:22:11 UTC | #23

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

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


zeetg | 2020-08-11 19:23:18 UTC | #24

image|228x14


KMatuszak | 2020-08-11 19:26:12 UTC | #25

a więc tutaj jest problem :slightlysmilingface:

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

musisz też ponownie uruchomić system aby zastosować zmiany


zeetg | 2020-08-11 19:34:15 UTC | #26

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 | 2020-08-11 19:35:29 UTC | #27

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


zeetg | 2020-08-11 19:38:03 UTC | #28

SKRYPT RESTARTUJĄCY

1
2
3
4
5
#!/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 | 2020-08-11 19:39:57 UTC | #29

[quote=”zeetg, post:28, topic:15650”]
sh start.sh
[/quote]

podmień to na bash start.sh

[quote=”zeetg, post:28, topic:15650”]
screen -S server java
[/quote]
a to na /usr/bin/screen -S server java

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


zeetg | 2020-08-11 19:55:58 UTC | #30

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


KMatuszak | 2020-08-11 20:00:46 UTC | #31

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


zeetg | 2020-08-11 20:00:44 UTC | #32

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


system | 2020-09-12 20:00:48 UTC | #33

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