logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.

Jak uruchomić skrypt BASH w nieskończonej pętli po starcie systemu?

piterek-23 09 Lut 2015 17:14 2697 13
REKLAMA
  • #1 14421434
    piterek-23
    Poziom 33  
    Posty: 3321
    Pomógł: 162
    Ocena: 427
    Witam,

    Potrzebuję pomocy w ogarnięciu skryptu który po starcie systemu sam wystartuje i będzie działał sobie bez przerwy w kółko.

    Może od początku. Skrypt o którym mowa:
    /home/edom/skrypty/sms.sh
    Kod: Bash
    Zaloguj się, aby zobaczyć kod

    skrypt jest uruchamiany przez:
    /home/edom/skrypty/sms_obsluga.sh
    Kod: Bash
    Zaloguj się, aby zobaczyć kod

    skrypt "sms_obsluga.sh" jest uruchamiany w CRON'ie:
    Kod: Bash
    Zaloguj się, aby zobaczyć kod


    Czy da się tak zrobić, aby skrypt wystartował wraz z systemem i działał sobie w tle i robił sobie co do niego należy?
    Kod: Bash
    Zaloguj się, aby zobaczyć kod
  • REKLAMA
  • #2 14421519
    podly
    Poziom 16  
    Posty: 228
    Pomógł: 12
    Ocena: 45
    Najprościej będzie jak użyjesz screen.
    Wrzuć w rc.local coś w stylu:

    /usr/bin/screen -d -m -S test /home/edom/skrypty/sms.sh

    i powinno być dobrze.
  • #3 14421560
    piterek-23
    Poziom 33  
    Posty: 3321
    Pomógł: 162
    Ocena: 427
    Ale jak zrobić, aby mój skrypt sms.sh pracował w kółko? Teraz gdy go uruchomie w terminalu to się wykona raz i kończy działanie.
  • REKLAMA
  • #4 14421688
    podly
    Poziom 16  
    Posty: 228
    Pomógł: 12
    Ocena: 45
    Wrzuć go w pętlę nieskończoną:

    Kod: Bash
    Zaloguj się, aby zobaczyć kod


    i będzie chodził w kółko.

    W całości to będzie coś takiego:

    Kod: Bash
    Zaloguj się, aby zobaczyć kod


    Musisz się tylko pozbyć exit, bo jak spełni warunek to zakończy skrypt - najprościej jak odwrócisz warunek -ne 0 i puścisz co tam masz a po fi dasz done.
  • #5 14421735
    piterek-23
    Poziom 33  
    Posty: 3321
    Pomógł: 162
    Ocena: 427
    Zrobiłem tak jak piszesz, a coś jest nie tak-skrypt nie chce "chodzić w kółko"-wykonuje się raz i kończy swoją pracę :(
  • #6 14421746
    podly
    Poziom 16  
    Posty: 228
    Pomógł: 12
    Ocena: 45
    Edytowałem poprzedni post, wywala Ci się na exit.
    Musisz odwrócić warunek:

    Kod: Bash
    Zaloguj się, aby zobaczyć kod
  • #7 14421770
    piterek-23
    Poziom 33  
    Posty: 3321
    Pomógł: 162
    Ocena: 427
    Tak właśnie zrobiłem, ale skrypt się wykona i kończy działanie.
  • REKLAMA
  • #8 14421815
    podly
    Poziom 16  
    Posty: 228
    Pomógł: 12
    Ocena: 45
    Sprawdziłem u siebie dokładnie tak:

    Kod: Bash
    Zaloguj się, aby zobaczyć kod


    I lata w kółko krzycząc że:
    Kod: Bash
    Zaloguj się, aby zobaczyć kod

    Sprawdź dokładnie, powrzucaj też echo w kilku miejscach, żeby widzieć gdzie się wykrzacza.
  • #9 14422616
    piterek-23
    Poziom 33  
    Posty: 3321
    Pomógł: 162
    Ocena: 427
    Jakieś zaćmienie umysłu. Rzeczywiście działa, ale działa za dobrze tzn. skrypt wykonuje się w kółko, ale uruchamia cały czas skrypt "sleep"
    Jednak zostanę przy starym sposobie czyli skrypt uruchamiany skryptem który jest wywołany przez CRON'a
  • REKLAMA
  • #10 14422894
    podly
    Poziom 16  
    Posty: 228
    Pomógł: 12
    Ocena: 45
    Nigdy nie używałem gnokii, ale skrypt nie powinien uruchamiać w kółko sleep.
    Jak wywalę sleep z
    Kod: Bash
    Zaloguj się, aby zobaczyć kod

    to przestaje wykonywać sleep.sh.
    Skoro kasujesz (-d) tego smsa to powinno działać OK - musisz gdzieś jeszcze mieć jakiś błąd.

    Swoją drogą wydaje mi się, że sposób w jaki podchodzisz do tematu nie jest optymalny. Z tego co widzę, to w pakiecie gnokii jest daemon smsd.
    Normalnie smsd działa w połączeniu z bazą danych, ale ma też tryb 'file' który automatycznie wykonuje skrypt bashowy zawsze po nadejściu smsa z parametrami: numer telefonu, data i treść smsa. Możesz sobie tam upchać co chcesz, odpalić daemona i nie przejmować się cronami i innymi bzdetami :)

    THE FILE MODULE
    This module doesn’t need an SQL server to work. For incoming messages it works in a way that it calls a program giving phone number, date as parameter and the message text on stdin. In the gnokii-smsd directory there is an example file action. It shows sms data to stdout. If you want something useful you must write your own action.

    Incoming sms are passed in format

    action number date < sms
  • #11 14422917
    piterek-23
    Poziom 33  
    Posty: 3321
    Pomógł: 162
    Ocena: 427
    Widzę, że muszę się bardziej zagłębić w gnokii.
    W skrypcie który pokazałem w pierwszym poście jest tylko "sleep", ale tak naprawdę mam dużo więcej poleceń.
  • #13 14433445
    podly
    Poziom 16  
    Posty: 228
    Pomógł: 12
    Ocena: 45
    @freebsd: czyli dokładnie to - smsd - co wcześniej podpowiedziałem koledze :)
  • #14 15096259
    piterek-23
    Poziom 33  
    Posty: 3321
    Pomógł: 162
    Ocena: 427
    Temat wyczerpany. Zamykam.

Podsumowanie tematu

✨ Użytkownik poszukiwał sposobu na uruchomienie skryptu BASH w nieskończonej pętli po starcie systemu. Otrzymał kilka sugestii, w tym użycie narzędzia `screen` do uruchomienia skryptu w tle oraz implementację nieskończonej pętli w samym skrypcie. Kluczowym problemem było zapewnienie, że skrypt nie kończy działania po pierwszym wykonaniu. Użytkownik został poinstruowany, aby odwrócić warunek zakończenia skryptu oraz upewnić się, że nie występują błędy w ścieżkach do plików. W końcu zasugerowano również wykorzystanie demona `smsd` z pakietu `gnokii`, który automatycznie wykonuje skrypty po odebraniu wiadomości SMS, co mogłoby być bardziej optymalne niż uruchamianie skryptu w pętli.
Podsumowanie wygenerowane przez AI na podstawie treści dyskusji.
REKLAMA