Crontab - problem z automatycznym restartem

Rozentiger | 2020-11-26 14:37:55 UTC | #1

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:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
#!/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:

1
2
#!/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 | 2020-11-26 14:44:09 UTC | #2

w start.sh wywal screena i przenieś go do skryptu restartującego


Rozentiger | 2020-11-26 14:57:27 UTC | #3

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 | 2020-11-26 15:24:57 UTC | #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?


Rozentiger | 2020-11-26 15:28:12 UTC | #6

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


LinGruby | 2020-11-26 17:55:43 UTC | #7

[quote=”Rozentiger, post:1, topic:16907”]
Witam, bawię się w automatyczne restarty i gdy do crontaba wrzucę:
0 6 * * * bash /home/minecraft/RPG/restart.sh
[/quote]

obstawiam że jak wszystko wykonuje się poprawnie w terminalu ( wszystkie skrypty ) to problem leży w dodatku w crontab

opcja uruchamiania przez roota
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 ;-)


Rozentiger | 2020-11-26 18:21:21 UTC | #8

crontab wykonuje

19 19 * * * bash /home/minecraft/RPG/restart.sh

ale

19 19 * * * root bash /home/minecraft/RPG/restart.sh

czy też

19 19 * * * root /home/minecraft/RPG/restart.sh

juz nie


LinGruby | 2020-11-26 19:02:56 UTC | #9

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

[quote=”Rozentiger, post:1, topic:16907”]

cd /home/minecraft/RPG
bash start.sh

[/quote]

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

Rozentiger | 2020-11-26 19:10:50 UTC | #10

bash /home/minecraft/RPG/start.sh

niestety ta opcja nie działa nawet przez konsolę


LinGruby | 2020-11-26 19:19:39 UTC | #11

a

bash -c "/home/minecraft/RPG/start.sh"

Rozentiger | 2020-11-26 19:23:08 UTC | #12

/bin/bash^M: bad interpreter: No such file or directory


LinGruby | 2020-11-26 19:24:02 UTC | #13

bash -c '/home/minecraft/RPG/start.sh'

Rozentiger | 2020-11-26 19:25:02 UTC | #14

to samo


LinGruby | 2020-11-26 19:32:00 UTC | #15

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


Rozentiger | 2020-11-26 19:36:23 UTC | #16

a próbowałeś sprawdzać co masz w PATH

nie bardzo rozumiem


LinGruby | 2020-11-26 19:43:27 UTC | #17

czy to w crontab czy .bashrc ( jak korzystasz a $SHELL bash )


Rozentiger | 2020-11-26 19:53:30 UTC | #18

może w krokach, bo jestem zielony w tym temacie i nie za bardzo wiem co robić


Nieznajomy11 | 2020-11-27 11:54:59 UTC | #19

[quote=”Rozentiger, post:12, topic:16907”]
/bin/bash^M: bad interpreter: No such file or directory
[/quote]

Pomijając sekcje samego crontaba. ^M to symbol wskazujący na to, że prawdopodobnie zapisałeś skrypt z edytora na systemie Microsoft Windows (CRLF). 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

Axerr | 2020-11-27 15:03:46 UTC | #20

[quote=”Nieznajomy11, post:19, topic:16907”]

sudo apt install dos2unix
dos2unix start.sh

[/quote]

Dobrze dzialającą alternatywą dla komendy dos2unix jest komenda

sed -i -e 's/\r$//' plik.sh

system | 2020-12-29 15:03:41 UTC | #21

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