Raspberry Pi startet Programme automatisch beim Start

22

Ich habe ein drahtloses Sensornetzwerk aufgebaut, das aus zwei Himbeer-Pis (runnnig Raspbian) mit eingeschalteten Sensoren und einer Basisstation Raspberry Pi besteht, die die Daten sammelt.

Jedes Mal, wenn ich das System ausführen möchte, muss ich mich bei jeder Sensoreinheit anmelden und zwei sich wiederholende Python-Programme ausführen, eines zum Sammeln von Sensordaten und eines zum Übertragen an die Basisstation.

Diese Geräte befinden sich an unangenehmen Orten ohne Internetzugang. Daher ist es nicht ganz einfach, einen Monitor, eine Tastatur und eine Maus mitzunehmen, um sie zum Laufen zu bringen. Kann ich sie so einrichten, dass sie sich automatisch anmelden, Programm 1 und dann Programm 2 beim Start automatisch ausführen?

Kersakov
quelle

Antworten:

15

Sie können diese beiden Programme zur Datei rc.local hinzufügen. Dies wird sie beim Start ausführen. Weitere Informationen finden Sie unter http://www.raspberrypi.org/documentation/linux/usage/rc-local.md .

Xer0FyT
quelle
3
Ein Punkt, der nicht in diesem Dokument enthalten ist und Menschen zu stören scheint: Nicht sudofür sich rc.localselbst verwenden. Es wird beim Booten mit Root-Rechten ausgeführt. Achten Sie unbedingt auf den Teil über die Verwendung, es &sei denn, Ihr Programm führt etwas schnell aus und wird dann beendet.
Goldlöckchen
Wenn Sie Ihre Programme ausgeführt werden sollen , nachdem Netzwerk auf und /path/to/somescript.sh &zu rc.local, und im Skript add while ! ping -c 1 -W 1 8.8.8.8; do sleep 1; done;bevor Ihre Programme zu starten.
Tor Klingberg
+ goldilocks Das Problem ist, dass Sie keinen Schreibzugriff erhalten, rc.localohne vorher sudo ausgeführt zu haben. Was schlagen Sie vor?
Rincewind
15

Die Antwort von Xer0FyT ist wahrscheinlich die einfachste Möglichkeit, ein Programm auf dem PI automatisch zu starten. Aber Probleme treten auf, wenn das gestartete Programm aus irgendeinem Grund abstürzt, weil es nicht neu gestartet wird, da es keine Prozessüberwachung gibt. Ich persönlich würde empfehlen, stattdessen Daemontools zu verwenden. Es ist ziemlich einfach einzurichten (und in Raspbian enthalten). Grundsätzlich erstellen Sie ein Dienstverzeichnis, das ein runShell-Skript enthält , das Ihr Programm startet. daemontools stellt dann sicher, dass Ihr Programm gestartet und neu gestartet wird, falls es aus irgendeinem Grund abstürzt.

Das Einrichten von daemontools ist ziemlich einfach. Gerade

apt-get install daemontools daemontools-run

Erstellen Sie dann Ihr Dienstverzeichnis mit einem ausführbaren Ausführungsskript:

# 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

Schauen Sie es sich an /service/my-service/runund bearbeiten Sie es, damit es Ihr eigenes Programm startet, anstatt es auszuführen echo. Sobald dies erledigt ist, verknüpfen Sie dieses Verzeichnis mit symlink, /etc/servicedamit es von daemontools automatisch (neu) gestartet wird:

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

Nach ca. 5 Sekunden sollte Ihr Programm ausgeführt werden. Sie können es mit starten / stoppen

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

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

Es ist auch möglich, sich (zum Beispiel) bei syslog anzumelden. Damit die Ausgabe Ihres Programms nicht verloren geht. Ich habe hier einen vollständigeren Blogeintrag darüber verfasst: https://info-beamer.com/blog/running-info-beamer-in-production

dividuum
quelle
9
  1. Klicken Sie in Raspian auf Menü, Einstellungen, Hauptmenü-Editor
  2. Klicken Sie auf Einstellungen und aktivieren Sie die Option Standardanwendungen für LXSession
  3. Klicken Sie auf OK und schließen Sie den Hauptmenü-Editor
  4. Klicken Sie nun auf Menü und unter Einstellungen auf Standardanwendungen für LXSession
  5. Die LXSession-Konfiguration wird geöffnet
  6. Klicken Sie auf Autostart
  7. Fügen Sie unter Manuelle automatisch gestartete Anwendungen in Ihre Java-Befehlszeile ein
  8. Klicken Sie auf Hinzufügen
  9. Schließen Sie die LXSession-Konfigurationsanwendung und starten Sie Ihren Pi neu

    Ihre Java-App sollte nach dem Neustart ausgeführt werden

Palmeta
quelle
Ich denke, hier ist nur ein bisschen mehr Detail erforderlich
Darth Vader
Hat gut funktioniert für mich!
Jbyrnes
Vielen Dank @Palmeta! Ich hatte ein Programm im Autostart aber tatsächlich vergessen, wo ich es eingestellt hatte. Ich habe überall geschaut. Mit dem von Ihnen beschriebenen Konfigurationstool konnte ich es endlich wieder finden und deaktivieren: D! 100 Punkte
Pascal Lamers
2

Sie haben wahrscheinlich bereits croneinige Housekeeping-Aufgaben des PI installiert.

Suche man 5 crontabnach @reboot.


quelle
0

Vielleicht möchten Sie recherchieren service. Sie können ein Init-Skript erstellen, das Teil des Init des Systems ist, und es auf einem geeigneten Runlevel ablegen.

Rennen man service.

Hier finden Sie eine Anleitung zum Erstellen von Init-Skripten: http://www.novell.com/coolsolutions/feature/15380.html

Bex
quelle
2
Leider muss systemddiese Antwort aktualisiert werden, da die meisten Linux-Distributionen, einschließlich Raspbian, einen lemmingähnlichen Ansturm verzeichnen, wenn das OP ihr System so aktualisiert, dass es von sysV init... 8- (
SlySven
0

Folgen Sie einfach diesem Link .

Angenommen, Sie haben test.txt auf dem Desktop, könnte ein Beispiel sein:

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

und es funktioniert!

Ehsan Ansari
quelle