Witam, bawię się w automatyczne restarty i gdy do crontaba wrzucę:
0 6 * * * bash /home/minecraft/RPG/restart.sh
wszystko normalnie się wykonuje poza krokami, które występują po zastopowaniu serwera. Dodam, że jeżeli ręcznie w konsoli wpiszę bash restart.sh wszystko wykonuje się tak jak powinno.
Mój skrypt restartujący stworzony do testów:
#!/bin/bash
/usr/bin/screen -S RPG -p 0 -X stuff "broadcast &33$(echo '\r')"
sleep 1s;
/usr/bin/screen -S RPG -p 0 -X stuff "broadcast &32$(echo '\r')"
sleep 1s;
/usr/bin/screen -S RPG -p 0 -X stuff "broadcast &31$(echo '\r')"
sleep 1s;
/usr/bin/screen -S RPG -p 0 -X stuff "save-all &31$(echo '\r')"
sleep 3s;
/usr/bin/screen -S RPG -p 0 -X stuff "stop^M"
sleep 10s;
cd /home/minecraft/RPG
bash start.sh
Zawartość start.sh:
#!/bin/bash
/usr/bin/screen -dmS RPG java -Xms26G -Xmx26G -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1NewSizePercent=40 -XX:G1MaxNewSizePercent=50 -XX:G1HeapRegionSize=16M -XX:G1ReservePercent=15 -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=20 -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 spigot.jar
W czym może być problem? Z góry dzięki za pomoc
DoreK
26 Listopad 2020 14:43
#2
w start.sh wywal screena i przenieś go do skryptu restartującego
Jeżeli chodzi o coś takiego to sytuacja wciąż wygląda identycznie
#!/bin/bash
/usr/bin/screen -S RPG -p 0 -X stuff “broadcast &33$(echo ‘\r’)”
sleep 1s;
/usr/bin/screen -S RPG -p 0 -X stuff “broadcast &32$(echo ‘\r’)”
sleep 1s;
/usr/bin/screen -S RPG -p 0 -X stuff “broadcast &31$(echo ‘\r’)”
sleep 1s;
/usr/bin/screen -S RPG -p 0 -X stuff “save-all &31$(echo ‘\r’)”
sleep 1s;
/usr/bin/screen -S RPG -p 0 -X stuff “stop^M”
sleep 8s;
cd /home/minecraft/RPG
/usr/bin/screen -dmS RPG java -Xms26G -Xmx26G -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1NewSizePercent=40 -XX:G1MaxNewSizePercent=50 -XX:G1HeapRegionSize=16M -XX:G1ReservePercent=15 -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=20 -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 spigot.jar
DoreK
26 Listopad 2020 15:24
#5
Dobra - inaczej.
/usr/bin/
przed screen
także możesz wywalić, nie jest to potrzebne
Przywróć poprzedni plik start.sh (trochę źle zrozumiałem post, wybacz).
Czy samo start.sh działało poprawnie?
Będąc w /home/minecraft/RPG i wpisując w konsole sh start.sh wszystko działa jak powinno, tu zawartość:
#!/bin/bash
screen -dmS RPG java -Xms26G -Xmx26G -XX:+UseG1GC -XX:+ParallelRefProcEnabled -XX:MaxGCPauseMillis=200 -XX:+UnlockExperimentalVMOptions -XX:+DisableExplicitGC -XX:+AlwaysPreTouch -XX:G1NewSizePercent=40 -XX:G1MaxNewSizePercent=50 -XX:G1HeapRegionSize=16M -XX:G1ReservePercent=15 -XX:G1HeapWastePercent=5 -XX:G1MixedGCCountTarget=4 -XX:InitiatingHeapOccupancyPercent=20 -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 spigot.jar
obstawiam że jak wszystko wykonuje się poprawnie w terminalu ( wszystkie skrypty ) to problem leży w dodatku w crontab
opcja uruchamiania przez root
a
0 6 * * * root /home/minecraft/RPG/restart.sh
opcja uruchamiana przez użytkownika
0 6 * * * użytkownik /home/minecraft/RPG/restart.sh
crontab
jest czuły na to, nawet są podpowiedzi
# m h dom mon dow user command
tak mi się wydaje
przyzna że to dziwne…
u mnie jeden ze skryptów do synchro zegara:
*/14 * * * * root /usr/local/bin/ntp.sh
zawartość skryptu:
#!/bin/sh
(
/usr/bin/ntpdate vega.cbk.poznan.pl \
zegar.umk.pl \
ntp.nask.pl \
time.atman.pl \
ntp.task.gda.pl \
/usr/bin/hwclock --systohc
) >/dev/null
działa więc się zdziwiłem…
tak mi przyszło do głowy
zapisz tak
bash /home/minecraft/RPG/start.sh
zobacz czy pójdzie ( czasami zdarza się że jakaś pierdoła… )
a czy jak i co się robi w cron możesz zobaczyć
systemctl status cron
bash /home/minecraft/RPG/start.sh
niestety ta opcja nie działa nawet przez konsolę
a
bash -c "/home/minecraft/RPG/start.sh"
bash -c '/home/minecraft/RPG/start.sh'
a próbowałeś sprawdzać co masz w PATH
może jak byś dodał /home/minecraft/RPG
wystarczyło by może
teraz już kombinuję acz moje skrypty działają a trochę ich mam
czy to na kvm czy na lapku…
trzeba sobie życie ułatwiać
czy to w crontab
czy .bashrc
( jak korzystasz a $SHELL bash )
może w krokach, bo jestem zielony w tym temacie i nie za bardzo wiem co robić
Pomijając sekcje samego crontaba. ^M to symbol wskazujący na to, że prawdopodobnie zapisałeś skrypt z edytora na systemie Microsoft Windows (CR LF). Linux wymaga jednak innych znaków końca linii (LF).
Należy przeprowadzić konwersję pliku. Można tego dokonać np. używając notepadd++ (pasek na dole) lub z narzędzia w terminalu, bezpośrednio na serwerze:
sudo apt install dos2unix
dos2unix start.sh
1 polubienie
Axerr
27 Listopad 2020 15:03
#20
Dobrze dzialającą alternatywą dla komendy dos2unix
jest komenda
sed -i -e 's/\r$//' plik.sh
system
Zamknięcie
29 Grudzień 2020 15:03
#21
Ten temat został automatycznie zamknięty 32 dni po ostatnim wpisie. Tworzenie nowych odpowiedzi nie jest już możliwe.