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?

Kersakow
źródło

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 .

Xer0FyT
źródło
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

dividuum
źródło
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

Palmeta
źródło
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.


źródło
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

Bex
źródło
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!

Ehsan Ansari
źródło