Skocz do zawartości
roninq6

Skrypt sh restartujący boty na TS3

Polecane posty

Witam.

Poszukuję skryptu sh, który wyłączy 3 boty na moim VPSie, a później je włącza. Wiem, że później trzeba to dodać do crontaba aby restartowało te procesy co np. 2h.

 

Procesy znajdują się w:
#1: cd AdminOnline / ./bot.sh start

#2: cd ABot / ./bot.sh start

#3: cd /etc/init.d / ./sinusbot.sh start

 

Byłby ktoś w stanie pomóc? Dodam, że w tych sprawach jestem początkujący i dopiero uczę się obsługi tego typu rzeczy. :)

Edytowano przez roninq6 (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
0 */2 * * * sh [PEŁNA_ŚCIEŻKA]AdminOnline/bot.sh restart

Sprawdź coś takiego, o ile polecenie restart jest obsługiwane przez te boty.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Gość Spoofy

1) skrypt powinien być w cronie

2) podaj pełną ścieżkę a nie zależną

3) zależność co do procesu/skryptu

 

O ile te "skrypty" mają funkcję "stop" która killuje proces albo wykonuje jakąś magię, to skrypt to "restartowania" najprościej wyglądałby mniej więcej tak:

Skrypt.sh :

#!/bin/bash

BOT1="<ścieżka>/bot.sh"

BOT2="<ścieżka>/bot.sh"

BOT3="<ścieżka>/sinusbot.sh"

 

${BOT1} stop && ${BOT1} start

${BOT2} stop && ${BOT2} start

${BOT3} stop && ${BOT3} start

 

# crontab -e

* */2 * * * skrypt.sh >/dev/null 2>&1

 

Przydatne: http://crontab-generator.org/

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Pełna ścieżka czyli np.

BOT1="ipmaszyny/root/ABot/bot.sh"
BOT2="ipmaszyny/root/AdminOnline/bot.sh"
BOT3="ipmaszyny/etc/init.d/sinusbot.sh"
?
I gdzie wrzucić całość? Nigdy nie miałem do czynienia z Crontabem.
Wybaczcie pytania laika. :lol:

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

 

Pełna ścieżka czyli np.

BOT1="ipmaszyny/root/ABot/bot.sh"
BOT2="ipmaszyny/root/AdminOnline/bot.sh"
BOT3="ipmaszyny/etc/init.d/sinusbot.sh"

?

I gdzie wrzucić całość? Nigdy nie miałem do czynienia z Crontabem.
Wybaczcie pytania laika. :lol:

 

 

 

wklep sobie w konsoli: pwd wtedy będziesz miał pełną ścieżkę, prawdopodobnie będzie to: /root/ABot/bot.sh i analogicznie dla pozostałych.

 

Crona edytujesz wydając polecenie: crontab -e -u USER (użytkownik z którego ma być uruchomiony cron)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

1) skrypt powinien być w cronie

2) podaj pełną ścieżkę a nie zależną

3) zależność co do procesu/skryptu

 

O ile te "skrypty" mają funkcję "stop" która killuje proces albo wykonuje jakąś magię, to skrypt to "restartowania" najprościej wyglądałby mniej więcej tak:

Skrypt.sh :

#!/bin/bash

BOT1="<ścieżka>/bot.sh"

BOT2="<ścieżka>/bot.sh"

BOT3="<ścieżka>/sinusbot.sh"

 

${BOT1} stop && ${BOT1} start

${BOT2} stop && ${BOT2} start

${BOT3} stop && ${BOT3} start

 

# crontab -e

* */2 * * * skrypt.sh >/dev/null 2>&1

 

Przydatne: http://crontab-generator.org/

 

Nie jestem mistrzem bo w życiu napisałem 0 skryptów, ale wydaje mi się że między stop a start powinien być jakiś sleep by dać czas procesowi na jego zatrzymanie się. Więc mniej więcej zrobił bym coś w takim stylu:

[...]

${BOT1} stop
${BOT2} stop
${BOT3} stop
// nie wiem jak się robi sleep dla skryptów basha
// autor tematu musi sprawdzić na własną rękę lub niech ktoś mu podrzuci rozwiązanie
sleep(2s)

${BOT1} start
${BOT2} start
${BOT3} start

[...]
Edytowano przez Fizyda (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Czyli wpisuję "crontab -e -u root" i przed całym tekstem edit wrzucam:

#!/bin/bash
BOT1="/root/ABot/bot.sh"
BOT2="/root/AdminOnline/bot.sh"
BOT3="/etc/init.d/sinusbot.sh"


${BOT1} stop && ${BOT1} start
${BOT2} stop && ${BOT2} start
${BOT3} stop && ${BOT3} start


# crontab -e
* */2 * * * skrypt.sh >/dev/null 2>&1
?

Próbowałem coś takiego i przy zapisywaniu wyskakuje:
"/tmp/crontab.3TBPah/crontab":5: bad minute
errors in crontab file, can't install.

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Czy ja dobrze zrozumiałem że ty wrzucasz to:

#!/bin/bash
BOT1="/root/ABot/bot.sh"
BOT2="/root/AdminOnline/bot.sh"
BOT3="/etc/init.d/sinusbot.sh"


${BOT1} stop && ${BOT1} start
${BOT2} stop && ${BOT2} start
${BOT3} stop && ${BOT3} start

w plik crontaba którego edytujesz

crontab -e -u root

tak?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Skrypt zapisujesz sobie pod dowolną nazwą np. boty.sh, potem robisz chmod +x boty.sh

 

a w cronie dodajesz wpis

0 */2 * * * sh /SCIEZKA/boty.sh

Sprawdzałeś moje wcześniejsze rozwiązanie z "restart" ?


 

 

Nie jestem mistrzem bo w życiu napisałem 0 skryptów, ale wydaje mi się że między stop a start powinien być jakiś sleep by dać czas procesowi na jego zatrzymanie się. Więc mniej więcej zrobił bym coś w takim stylu:

[...]

${BOT1} stop
${BOT2} stop
${BOT3} stop
// nie wiem jak się robi sleep dla skryptów basha
// autor tematu musi sprawdzić na własną rękę lub niech ktoś mu podrzuci rozwiązanie
sleep(2s)

${BOT1} start
${BOT2} start
${BOT3} start

[...]

 

Po co tak, "&&" zastępuje sleep() i wykonuje kolejne zadanie zaraz po wykonaniu pierwszego. Może to być 0.01 sekundy ale również dobrze i 10 sekund.

Edytowano przez lord101 (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Skrypt zapisujesz sobie pod dowolną nazwą np. boty.sh, potem robisz chmod +x boty.sh

 

a w cronie dodajesz wpis

0 */2 * * * sh /SCIEZKA/boty.sh

Sprawdzałeś moje wcześniejsze rozwiązanie z "restart" ?

Teraz zrobiłem dokładnie tak jak opisałeś. Wyskoczyło coś takiego:

 

no crontab for root - using an empty one
crontab: installing new crontab

 

Po wpisaniu crontab -e -u root ta linijka jest już zapisana.

199f97b247226.png

 

Tak to powinno wyglądać? Da się w ogóle jakoś sprawdzić czy te boty są restartowane? Czy tylko przez htop np. patrzeć na uptime?

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Po co tak, "&&" zastępuje sleep() i wykonuje kolejne zadanie zaraz po wykonaniu pierwszego. Może to być 0.01 sekundy ale również dobrze i 10 sekund.

 

W sumie racja, napisałem głupotę, ale przynajmniej się człowiek czegoś nauczył. Moja propozycja wynikała z tego że ostatnio przeglądałem skrypt do obsługi jakiegoś daemona i tam właśnie obsługa restartu była realizowana przez sleep. Dodatkowo komentarz był sugerujący że na wszelki wpadek należy odczekać chwilę przed startem by mieć pewność że proces się zakończył.

Edytowano przez Fizyda (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach
Gość Spoofy

 

W sumie racja, napisałem głupotę, ale przynajmniej się człowiek czegoś nauczył. Moja propozycja wynikała z tego że ostatnio przeglądałem skrypt do obsługi jakiegoś daemona i tam właśnie obsługa restartu była realizowana przez sleep. Dodatkowo komentarz był sugerujący że na wszelki wpadek należy odczekać chwilę przed startem by mieć pewność że proces się zakończył.

​Napisałem to dosłownie w 1 minutę, będąc w pracy i obsługując kilka innych rzeczy - to raz,

dwa to istotnie "&&" to wykonanie następnego polecenia wtedy i tylko wtedy gdy pierwsze wykona się z exitcode'em innym niż error, trzy to mogę rozpisać i omówić wszystkie init-functions, start-stop-deamon, szukanie pid'ów po n razy i upewnianie się że proces działa, lockfile'e, pidfile'e, pseudo frameworki g​ithubowe do demonizacji, demonizację w perl, python, c, cpp - czego tylko chcesz - problem polega na tym że to już powinien robić magiczny "bot.sh" a w cronie to takie rzeczy się tylko automatyzuje ;)

​no i poza tym autor prosił o konkretną rzecz, bez kontroli tego.

​Na przyszłość, jeżeli chcecie korzystać z gotowców do takich rzeczy to polecam supervisord ;)

  • Upvote 1

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Patrząc na uptime w htop procesów jednego z botów wydaje mi się, że skrypt działa.

 

Jeśli bym chciał aby skrypt restartował się co 30 minut zamiast co 2h to zmienić w crontabie
0 */2 * * * sh /root/boty.sh
na
0 */0.5 * * * sh /root/boty.sh ?

 

Jeden z procesów już po pół godziny potrafi sam z siebie zrobić z 90MB 500MB zużycia ramu. Może i nawet co 15minut taki restart bym zrobił.

Edytowano przez roninq6 (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Ustawiam to jednak co 15 minut, tak będzie okej?

0-59/15 * * * * sh /root/boty.sh

I druga sprawa jaki byłby skrypt aby np po restarcie lub zawsze po komendzie reboot, serwer TeamSpeak odpalał się automatycznie + odpalałyby się razem z tym serwerem te 3 boty, czyli:

/root/ABot/bot.sh
/root/AdminOnline/bot.sh
/etc/init.d/sinusbot.sh

 

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

@UP

Jednak skrypt nie restartuje mi botów wpisując w cronie "0-59/15 * * * * sh /root/boty.sh" procesy ABota czyli "php core.php -i 1" i "php core.php -i 2" i proces AdminOnline czyli "php adminbot.php -i 1" potrafią nabijać ponad godzine bez restartu. W ogóle to wygląda tak jakby czasami się restartowały a czasami nie

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

o ile bot AdminOnline wydaje się, że się restartuje (rano włączałem i teraz w htop jest 4min uptime) to proces ABota czyli php core.php -i -1 ma teraz w htopie uptime 30min mimo odpalonego crontaba z postu wyżej. Tak jakby się zrestartował, ale nie restartuje się co te wpisane 15 minut... nie wiem o co może chodzić. Może trzeba zmienić to boty.sh na restartowanie konkretnych procesów?

Edytowano przez roninq6 (zobacz historię edycji)

Udostępnij ten post


Link to postu
Udostępnij na innych stronach

Bądź aktywny! Zaloguj się lub utwórz konto

Tylko zarejestrowani użytkownicy mogą komentować zawartość tej strony

Utwórz konto

Zarejestruj nowe konto, to proste!

Zarejestruj nowe konto

Zaloguj się

Posiadasz własne konto? Użyj go!

Zaloguj się


×