Skocz do zawartości


 

Zdjęcie

Skrypt sh restartujący boty na TS3

Skrypt sh restartujący boty na TS3

  • Proszę się zalogować aby odpowiedzieć
19 odpowiedzi na ten temat

Skrypt sh restartujący boty na TS3

#1 roninq6

roninq6

    Czasami na forum

  • Użytkownicy
  • 32 postów

Napisany 22 lipiec 2016 - 11:18

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. :)


Edytowany przez roninq6, 22 lipiec 2016 - 11:19.

  • 0

#2 lord101

lord101

    Stały użytkownik

  • WHT Pro
  • PipPipPipPipPip
  • 303 postów
  • Skąd:Rzeszów

Napisany 22 lipiec 2016 - 11:38

0 */2 * * * sh [PEŁNA_ŚCIEŻKA]AdminOnline/bot.sh restart

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


  • 0

#3 Gość_Spoofy_*

Gość_Spoofy_*
  • Goście

Napisany 22 lipiec 2016 - 11:40

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/


  • 0

#4 roninq6

roninq6

    Czasami na forum

  • Użytkownicy
  • 32 postów

Napisany 22 lipiec 2016 - 12:10

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:

  • 0

#5 lord101

lord101

    Stały użytkownik

  • WHT Pro
  • PipPipPipPipPip
  • 303 postów
  • Skąd:Rzeszów

Napisany 22 lipiec 2016 - 12:16

 

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)


  • 0

#6 Gość_Spoofy_*

Gość_Spoofy_*
  • Goście

Napisany 22 lipiec 2016 - 12:47

no i nie musisz podawać "ipmaszyny" ;)


  • 0

#7 Fizyda

Fizyda

    Stały użytkownik

  • WHT Pro
  • PipPipPipPipPip
  • 495 postów

Napisany 22 lipiec 2016 - 13:01

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

[...]

Edytowany przez Fizyda, 22 lipiec 2016 - 13:01.

  • 0

#8 roninq6

roninq6

    Czasami na forum

  • Użytkownicy
  • 32 postów

Napisany 22 lipiec 2016 - 13:43

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.

  • 0

#9 Fizyda

Fizyda

    Stały użytkownik

  • WHT Pro
  • PipPipPipPipPip
  • 495 postów

Napisany 22 lipiec 2016 - 13:48

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?


  • 0

#10 lord101

lord101

    Stały użytkownik

  • WHT Pro
  • PipPipPipPipPip
  • 303 postów
  • Skąd:Rzeszów

Napisany 22 lipiec 2016 - 13:52

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. 


Edytowany przez lord101, 22 lipiec 2016 - 13:53.

  • 0

#11 roninq6

roninq6

    Czasami na forum

  • Użytkownicy
  • 32 postów

Napisany 22 lipiec 2016 - 14:02

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?

 

  • 0

#12 Fizyda

Fizyda

    Stały użytkownik

  • WHT Pro
  • PipPipPipPipPip
  • 495 postów

Napisany 22 lipiec 2016 - 14:05

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ł.


Edytowany przez Fizyda, 22 lipiec 2016 - 14:06.

  • 0

#13 Gość_Spoofy_*

Gość_Spoofy_*
  • Goście

Napisany 22 lipiec 2016 - 22:50

 

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 ;)


  • 1

#14 roninq6

roninq6

    Czasami na forum

  • Użytkownicy
  • 32 postów

Napisany 23 lipiec 2016 - 11:12

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ł.


Edytowany przez roninq6, 23 lipiec 2016 - 11:14.

  • 0

#15 krzos

krzos

    Stały użytkownik

  • Użytkownicy
  • PipPipPipPipPip
  • 110 postów

Napisany 23 lipiec 2016 - 12:44

*/30 * * * *

Wysłane z mojego GT-I9195 przy użyciu Tapatalka
  • 0

#16 roninq6

roninq6

    Czasami na forum

  • Użytkownicy
  • 32 postów

Napisany 25 lipiec 2016 - 09:18

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

 

 


  • 0

#17 roninq6

roninq6

    Czasami na forum

  • Użytkownicy
  • 32 postów

Napisany 27 lipiec 2016 - 12:05

@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


  • 0

#18 roninq6

roninq6

    Czasami na forum

  • Użytkownicy
  • 32 postów

Napisany 01 sierpień 2016 - 11:30

@up


  • 0

#19 lord101

lord101

    Stały użytkownik

  • WHT Pro
  • PipPipPipPipPip
  • 303 postów
  • Skąd:Rzeszów

Napisany 01 sierpień 2016 - 20:18

*/15 * * * * sh /root/boty.sh


  • 0

#20 roninq6

roninq6

    Czasami na forum

  • Użytkownicy
  • 32 postów

Napisany 05 sierpień 2016 - 21:26

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?


Edytowany przez roninq6, 05 sierpień 2016 - 21:26.

  • 0





0 użytkowników czyta ten temat

0 użytkowników, 0 gości, 0 anonimowych użytkowników