roninq6 0 Zgłoś post Napisano Lipiec 22, 2016 (edytowany) 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 Lipiec 22, 2016 przez roninq6 (zobacz historię edycji) Udostępnij ten post Link to postu Udostępnij na innych stronach
lord101 18 Zgłoś post Napisano Lipiec 22, 2016 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 Zgłoś post Napisano Lipiec 22, 2016 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
roninq6 0 Zgłoś post Napisano Lipiec 22, 2016 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. Udostępnij ten post Link to postu Udostępnij na innych stronach
lord101 18 Zgłoś post Napisano Lipiec 22, 2016 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. 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
Gość Spoofy Zgłoś post Napisano Lipiec 22, 2016 no i nie musisz podawać "ipmaszyny" Udostępnij ten post Link to postu Udostępnij na innych stronach
Fizyda 34 Zgłoś post Napisano Lipiec 22, 2016 (edytowany) 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 Lipiec 22, 2016 przez Fizyda (zobacz historię edycji) Udostępnij ten post Link to postu Udostępnij na innych stronach
roninq6 0 Zgłoś post Napisano Lipiec 22, 2016 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
Fizyda 34 Zgłoś post Napisano Lipiec 22, 2016 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
lord101 18 Zgłoś post Napisano Lipiec 22, 2016 (edytowany) 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 Lipiec 22, 2016 przez lord101 (zobacz historię edycji) Udostępnij ten post Link to postu Udostępnij na innych stronach
roninq6 0 Zgłoś post Napisano Lipiec 22, 2016 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. 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
Fizyda 34 Zgłoś post Napisano Lipiec 22, 2016 (edytowany) 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 Lipiec 22, 2016 przez Fizyda (zobacz historię edycji) Udostępnij ten post Link to postu Udostępnij na innych stronach
Gość Spoofy Zgłoś post Napisano Lipiec 22, 2016 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 githubowe 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 Udostępnij ten post Link to postu Udostępnij na innych stronach
roninq6 0 Zgłoś post Napisano Lipiec 23, 2016 (edytowany) 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 crontabie0 */2 * * * sh /root/boty.shna0 */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 Lipiec 23, 2016 przez roninq6 (zobacz historię edycji) Udostępnij ten post Link to postu Udostępnij na innych stronach
roninq6 0 Zgłoś post Napisano Lipiec 25, 2016 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
roninq6 0 Zgłoś post Napisano Lipiec 27, 2016 @UPJednak 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
roninq6 0 Zgłoś post Napisano Sierpień 1, 2016 @up Udostępnij ten post Link to postu Udostępnij na innych stronach
lord101 18 Zgłoś post Napisano Sierpień 1, 2016 */15 * * * * sh /root/boty.sh Udostępnij ten post Link to postu Udostępnij na innych stronach
roninq6 0 Zgłoś post Napisano Sierpień 5, 2016 (edytowany) 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 Sierpień 5, 2016 przez roninq6 (zobacz historię edycji) Udostępnij ten post Link to postu Udostępnij na innych stronach