Raspberry Pi uruchamia programy automatycznie podczas uruchamiania


22

Zbudowałem bezprzewodową sieć czujników składającą się z dwóch Raspberry Pi (runnnig Raspbian) z włączonymi czujnikami i stacji bazowej Raspberry Pi, która zbiera dane.

Za każdym razem, gdy chcę uruchomić system, muszę zalogować się do każdej jednostki czujnika i uruchomić dwa zapętlone programy w języku Python, jeden do gromadzenia danych z czujnika i jeden do przesyłania do stacji bazowej.

Jednostki te znajdują się w dziwnych lokalizacjach bez dostępu do Internetu, więc zabranie ze sobą monitora, klawiatury i myszy, aby je uruchomić, nie jest łatwe. Czy mogę skonfigurować je tak, aby automatycznie się logowało, uruchamiało program 1, a następnie uruchamiało program 2 automatycznie podczas uruchamiania?

Odpowiedzi:


15

Możesz dodać te 2 programy do pliku rc.local. Spowoduje to uruchomienie ich podczas uruchamiania. Więcej informacji można znaleźć na stronie http://www.raspberrypi.org/documentation/linux/usage/rc-local.md .


3
Punkt nie w tym dokumencie, który wydaje się denerwować ludzi: Nie używaj sam sudow rc.localsobie. Jest uruchamiany z uprawnieniami roota podczas rozruchu. Pamiętaj, aby zwrócić uwagę na część dotyczącą używania, &chyba że twój program po prostu zrobi coś szybko, a następnie zakończy działanie.
— Złotowłosa

Jeśli chcesz, aby twoje programy działały po uruchomieniu sieci, i /path/to/somescript.sh &do rc.localskryptu dodaj while ! ping -c 1 -W 1 8.8.8.8; do sleep 1; done;przed uruchomieniem programów.
— Tor Klingberg

+ goldilocks Problem polega na tym, że nie można uzyskać dostępu do zapisu rc.localbez uprzedniego uruchomienia sudo. Co sugerujesz?
— Rincewind

15

Odpowiedź Xer0FyT jest prawdopodobnie najprostszym sposobem automatycznego uruchomienia programu na PI. Ale problemy pojawiają się, gdy uruchomiony program ulega awarii z jakiegokolwiek powodu, ponieważ nie zostanie ponownie uruchomiony, ponieważ nie ma monitorowania procesu. Osobiście poleciłbym zamiast tego używać Daemontools . Jest dość prosty w konfiguracji (i jest zawarty w Raspbian). Zasadniczo tworzysz katalog usług, który zawierarun skrypt powłoki, który uruchamia program. daemontools upewni się, że Twój program zostanie uruchomiony i zrestartowany, jeśli nastąpi awaria z jakiegokolwiek powodu.

Konfiguracja daemontools jest dość prosta. Właśnie

apt-get install daemontools daemontools-run

Następnie utwórz katalog usługi zawierający wykonywalny skrypt uruchamiania:

# create the service directory
mkdir -p /service/my-service

# create the run script
cat > /service/my-service/run <<EOF
#!/bin/sh
echo "I'm an example service executed by daemontools"
sleep 1
# Replace those 2 lines with a real call to your program like this:
# exec /my/program.py --arguments
EOF

# make it executable
chmod 755 /service/my-service/run

Obejrzyj /service/my-service/runi edytuj, aby uruchamiał własny program zamiast uruchamiać echo. Gdy to zrobisz, dowiązanie symboliczne do tego katalogu, /etc/serviceaby daemontools automatycznie (ponownie) go uruchomił:

cd /etc/service
ln -s /service/my-service .

Po około 5 sekundach twój program powinien się uruchomić. Możesz go uruchomić / zatrzymać za pomocą

# stop it
$ svc -d /service/my-service

# start it
$ svc -u /service/my-service

Możliwe jest również zalogowanie się na (na przykład) syslog. Tak więc wyjście twojego programu nie ginie. Bardziej kompletny post na ten temat napisałem tutaj: https://info-beamer.com/blog/running-info-beamer-in-production


9
  1. W Raspian kliknij Menu, Preferencje, Edytor menu głównego
  2. Kliknij Preferencje i zaznacz Domyślne aplikacje dla LXSession
  3. Kliknij OK i zamknij edytor menu głównego
  4. Teraz kliknij Menu i Preferencje kliknij Domyślne aplikacje dla LXSession
  5. Otwiera się konfiguracja LXSession
  6. Kliknij opcję Autostart
  7. W obszarze Ręcznie uruchamiane automatycznie aplikacje wklej w wierszu polecenia Java
  8. kliknij dodaj
  9. zamknij aplikację konfiguracyjną LXSession i uruchom ponownie komputer pi

    Twoja aplikacja Java powinna działać po ponownym uruchomieniu


Myślę, że potrzeba tutaj trochę więcej szczegółów
— Darth Vader

Działa dobrze dla mnie!
— jbyrnes,

Dzięki @Palmeta! Miałem jeden program w trybie autostartu, ale faktycznie zapomniałem, gdzie go ustawiłem. Szukałem wszędzie. Za pomocą narzędzia konfiguracyjnego, które opisałeś, w końcu mógłbym go zlokalizować i dezaktywować: D! 100 punktów
— Pascal Lamers

2

Prawdopodobnie już cronzainstalowałeś niektóre zadania sprzątania PI.

Szukaj man 5 crontabdla @reboot.


0

Możesz chcieć zbadać service. Możesz utworzyć skrypt init, który jest częścią init systemu i ustawić go na odpowiednim poziomie działania.

Uruchom man service.

Oto przewodnik po tworzeniu skryptów inicjujących: http://www.novell.com/coolsolutions/feature/15380.html


2
Niestety, przy systemdlemingowym pośpiechu w kierunku większości dystrybucji Linuksa, w tym Raspbian, ta odpowiedź będzie wymagać aktualizacji, jeśli OP zaktualizuje swój system, aby przejął system sysV init... 8- (
— SlySven

0

Po prostu wykonaj to link .

Zakładając, że masz plik test.txt na komputerze, przykładem może być:

sudo nano /etc/xdg/lxsession/LXDE-pi/autostart
@leafpad /home/pi/Desktop/test.txt

i to działa!

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.