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

Raspbian Linux – automatyczne uruchamianie programu C przy starcie systemu

ienecode 10 Gru 2014 16:11 3522 13
REKLAMA
  • #1 14209607
    ienecode
    Poziom 21  
    Posty: 2097
    Ocena: 96
    Witam mam system linux Raspbian. Chciałbym żeby zaraz po uruchomieniu systemu odpalił się mój kod napisany w C, albo nawet wcześniej jeśli to możliwe. Chodzi o to aby po starcie systemu nie wykonywać polecenia sudo ./test .

    Jest taka możliwość, jeśli tak to jak to zrobić?
  • REKLAMA
  • #3 14357102
    ienecode
    Poziom 21  
    Posty: 2097
    Ocena: 96
    WItam ponownie. Dopiero teraz znalazłem czas na kontynuacje tematu.

    A więc plik rc.local wygląda następująco:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod



    Aby uruchomić program napisany w C wraz z startem systemu należy nad linią exit 0 umieścić sudo ./test ?

    Dodam że program działa w pętli nieskończonej while(1) czy to nie spowoduje że system się nie uruchomi?


    Proszę o pomoc bo nie chciał bym tego uszkodzić systemu.
  • REKLAMA
  • #4 14357296
    Epic
    Poziom 30  
    Posty: 1098
    Pomógł: 147
    Ocena: 108
    Bez sudo i podaj pełną ścieżkę do programu o ile nie masz go w PATH.
  • #5 14357388
    ienecode
    Poziom 21  
    Posty: 2097
    Ocena: 96
    tylko program bez uprawnień root'a się nie wykona, przynajmniej z konsoli...

    Dodano po 2 [minuty]:

    Epic napisał:
    o ile nie masz go w PATH.

    Tego nie rozumie...

    Będąc w konsoli zalogowany jako zwykły użytkownik projekt mam w folderze proj. Przechodzę do niego poleceniem cd /proj i następnie sudo ./lcd i program działa.
  • #6 14357618
    Epic
    Poziom 30  
    Posty: 1098
    Pomógł: 147
    Ocena: 108
    rc.local wykonuje wszystkie polecenia z uprawnieniami roota

    PATH to zmienna powłoki przechowująca katalogi, które mają być przeszukane w poszukiwaniu danego programu. W uproszczeniu po to byś nie musiał wchodzić do /proj by uruchomić program tylko po prostu wpisać jego nazwę w konsoli.
  • REKLAMA
  • #7 14357658
    dt1
    Admin grupy komputery
    Posty: 48143
    Pomógł: 7290
    Ocena: 8242
    Jeśli program działa w pętli to należałoby go uruchomić tak, aby nie blokował dalszego wykonywania skryptu:

    /pelna/sciezka/do/programu/program parametr1 parametr2 &

    Zwróć uwagę na & na końcu, jest on istotny aby uruchomić program w tle.

    Przy okazji - test jest jednym z poleceń powłoki bash, nie powinno się tak nazywac skryptu!
    http://bash.0x1fff.com/polecenie:test
  • #8 14357732
    ienecode
    Poziom 21  
    Posty: 2097
    Ocena: 96
    Racja. Zmieniłem nazwe test na program

    Na głownym oknie mam tak:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    W takim razie moja pełna ścieżka to:

    Kod: C / C++
    Zaloguj się, aby zobaczyć kod
    - Sprawdzone poleceniem: readlink -f program

    Czyli jak wpisze w pliku rc.local nad linią exit 0 tak:


    Kod: C / C++
    Zaloguj się, aby zobaczyć kod


    to uruchomi się mój program?
  • REKLAMA
  • #9 14357785
    krru
    Poziom 33  
    Posty: 1819
    Pomógł: 230
    Ocena: 214
    fajnie jest użyć
    Kod: Bash
    Zaloguj się, aby zobaczyć kod
    (nie wiem czy akurat Raspbian to ma).
    a jeszcze fajniej jest przygotować skrypt uruchamiajacy i zatrzymujacy twój program w /etc/init.d (wziąć za wzor jeden z tamtejszych skryptów), przygotować odpowiednie linki w /etc/rcN.d. Wtedy zarówno program sam ruszy kiedy trzeba, jak i będzie można go zatrzymać i uruchomić ponownie poleceniem
    Kod: Bash
    Zaloguj się, aby zobaczyć kod
    .
  • Pomocny post
    #10 14357811
    dt1
    Admin grupy komputery
    Posty: 48143
    Pomógł: 7290
    Ocena: 8242
    Damian7546 napisał:

    /home/pi/proj/program &

    to uruchomi się mój program?

    Tak, to powinno zadziałać.
  • #11 14357879
    ienecode
    Poziom 21  
    Posty: 2097
    Ocena: 96
    Super , działa... A teraz kiedy zaloguje sie do systemu to mam możliwość zatrzymanie tego programu? Nie jest mi to potrzebne, ale pytam gdyby bylo ...
  • #12 14357982
    dt1
    Admin grupy komputery
    Posty: 48143
    Pomógł: 7290
    Ocena: 8242
    Komendy:

    killall program (lub killall -9 program, żeby wymusić zabicie procesów sygnałem SIGKILL)
    kill `pidof program` (lub kill -9 `pidof program`)
  • Pomocny post
    #13 14358121
    namok
    Poziom 25  
    Posty: 529
    Pomógł: 91
    Ocena: 73
    Damian7546 napisał:
    Super , działa... A teraz kiedy zaloguje sie do systemu to mam możliwość zatrzymanie tego programu? Nie jest mi to potrzebne, ale pytam gdyby bylo ...

    Np. tak:
    Kod: Bash
    Zaloguj się, aby zobaczyć kod
  • #14 14358196
    ienecode
    Poziom 21  
    Posty: 2097
    Ocena: 96
    Dzieki za pomoc, temat uważam za zamknięty.

Podsumowanie tematu

✨ Użytkownik systemu Linux Raspbian chciał uruchomić program napisany w C automatycznie po starcie systemu, unikając ręcznego wprowadzania polecenia. Odpowiedzi sugerowały edytowanie pliku /etc/rc.local, gdzie można dodać pełną ścieżkę do programu przed linią "exit 0", co pozwoli na jego uruchomienie w tle. Użytkownik został również poinformowany o konieczności użycia "&" na końcu polecenia, aby nie blokować dalszego wykonywania skryptu. Dodatkowo, omówiono metody zatrzymywania programu po jego uruchomieniu, takie jak użycie komendy killall. Użytkownik potwierdził, że rozwiązanie działa.
REKLAMA