Raspberry Pi Autostart: Programm automatisch starten lassen

24. March 2014
30 Comments

Immer wieder passiert es, dass man Programme installiert, aber diese nicht automatisch beim hochfahren starten. Um den Raspberry Pi Autostart nutzen zu können, braucht man lediglich die Informationen in der /etc/rc.local Datei im Linux System zu hinterlegen.

Das ist z.B. bei DNS Service noip2 der Fall. Im folgenden zeige ich wie man ein Programm ohne viel Mühe automatisch starten lässt, anhand vom Beispiel noip2.

 

Raspberry Pi Autostart Skript

Als erstes muss im Verzeichnis /etc/init.d/ ein Skript erstellt werden, mittels welchem das Programm gestartet wird, daher erstellen wir ein Skript (es muss nicht unbedingt eine Datei-Endung haben)

sudo nano /etc/init.d/NameDesSkripts
mit folgendem Inhalt:

Anstelle von noip2 kann hier natürlich auch jeden andere installierte Programm stehen, aber sei vorsichtig, dass auf keine Benutzerinteraktion gewartet wird (wie das Bestätigen bei apt-get), da es im schlimmsten Fall dazu kommt, dass beim booten auf die Eingabe gewartet wird und der Pi nicht startet.

Als nächstes weisen wir die benötigten Rechte zu (Lesen & Schreiben)

sudo chmod 755 /etc/init.d/NameDesSkripts
und testen das Skript indem wir es starten
sudo /etc/init.d/NameDesSkripts start
und gleich wieder stoppen:
sudo /etc/init.d/NameDesSkripts stop
Damit das Skript beim booten auch aufgerufen wird, führen wir folgendes aus:
sudo update-rc.d NameDesSkripts defaults
Nun sollte das Programm bei starten auch ausgeführt werden. Solltest du eines Tages dich umentscheiden und das Programm aus dem Autostart nehmen wollen, kannst du dies mit:
sudo update-rc.d -f  NameDesSkripts remove

Wer mehr über das Thema erfahren will, kann dies hier tun.

 

Raspberry Pi Autostart – weitere Möglichkeiten

Eine andere Option zum Starten eines Skripts oder Programms ist „Cron“. Dadurch ist es möglich einen Befehl (der ein Aufruf eines Programms o.ä. sein kann) zu einem bestimmten Zeitpunkt zu starten. Der Zeitpunkt kann dabei entweder z.B. um die gleiche Uhrzeit am Tag sein oder aber nach dem Hochfahren des Systems. Cron bietet sehr viele Anpassungsmöglichkeiten, welche hier eingesehen werden können.

 

30 Kommentare

  1. Danke erst einmal für das Tutorial.

    Mit dem Befehl “ sudo /etc/init.d/NameDesSkripts start“ kann ich meine Konsolenanwendung wunderbar starten. Allerdings funktioniert die Anwendung beim Neustart nicht.
    Gibt es dazu weitere Sachen, die man einstellen kann? Was wird mit dem Befehl „sudo update-rc.d NameDesSkripts defaults“ eigentlich genau gemacht?

    Das Skript beinhaltet eigentlich nur zwei cd-Befehle und ruft dann die entsprechende Datei in dem Ordner auf.

    Antworten
  2. Also ich hab jetzt noch eine Anwendung eingebaut, dass ich eine E-Mail bekomme, wenn das Skript korrekt ausgeführt wird. Der Aufruf des Skriptes aus dem Autostart heraus klappt damit auf jeden Fall. D.h. meine erste Annahme ist schlichtweg falsch gewesen. Ich dachte nämlich, wenn ich mich über den Remotedesktop verbinde eine offene Konsole sehe und kam dadurch auf meine These. Danke dir, Felix. Die Zeile fügt mein Skript praktisch in den Ordner Autostart, wenn ich es denn mit Windows vergleichen will. An dem Befehl konnte es damit nicht liegen.

    Antworten
    • Sehr schön, freut mich, dass es klappt.
      Ein Tutorial, wie du die Konsolenbenachrichtigung ändern kannst (und gleichzeitig Skripte aufrufen, wenn das SSH Terminal geöffnet wird), findest du hier.

      Antworten
  3. Sehr schöne Erklärung! Ein dickes Lob! Funktioniert auch soweit wie beschrieben. Ich habe die Anleitung dazu genutzt ein C-Berry Display beim Systemstart automatisch einzuschalten. Dazu verweise ich beim Start-Befehl auf das fb2cberry Skript. Auch im Stop-Befehl habe ich killall fb2cberry referenziert. Leider habe ich dass Problem, dass ich beim Stop-Befehl gerne noch den TFT-Display abgeschalten hätte. Hierzu nutze ich momentan noch ein eigenes Skript, welches ich über das Terminal mit

    cd /home/tft_aus
    sudo ./tft_aus

    abschalte. Leider kann ich nicht innerhalb des Stop-Befehls direkt auf das Verzeichnis des /home/tft_aus verweisen irgendwie wird der Befehl ./tft_aus dann nicht ausgeführt. Hat jemand eine Idee?

    Antworten
  4. zudem wird das Display beim Systemstart erst sehr spät am nahe am Ende des Boot-Prozesses eingeschaltet. Gibt es eine Möglichkeit Programme im Autostart früher auszuführen?

    Antworten
  5. Hey,

    ich habe leider auch den Fehler das ich das Programm per Skript wunderbar aufrufen kann, jedoch passiert nach neustart nichts.

    Antworten
  6. Es handelt sich um ein selbst geschriebenes Programm.
    Wenn es ich das Skript über das Terminal mit „bash…..start“ starte, funktioniert es. Mit cron will es leider auch nicht, sofern ich alles richtig eingestellt habe.

    Antworten
  7. Hi Felix,
    nochmals großes Lob für deine Tutorials!
    Könntest Du mir die angegebenen Werte in der INIT INFO erläutern?
    Nur so zur Erleuchtung eines Unwissenden.

    MfG Hauschi

    Antworten
  8. herzlichen dank dür dieses tut
    das ganze hat nun meine frau angeregt die decke damit einmal rum zu verziehren nun kommen mir einige fragen auf

    gibt es ein max anzahl an leds zum ansteuern habe 20 meter umfang für die wohnstube
    wären ebenmal 640 leds ??
    denn drängt sich auch schon meine nächste frage auf is es denn mäglich das ganze mit Hyperion zu steuern, so wäre meine idee da ich ja nun den ganzen ambi quatsch weglassen würde und nur bund oder einfarbig machen würde

    schon mal ein grösses dank für die antwort
    wenn das alles klappen sollte setz ich mich drann mit meinen 0 kentnissen 🙂

    Antworten
  9. Hallo,

    ich starte wie hier beschrieben ein c-programm das auf Eingaben der Tastatur wartet.
    Mein Problem ist, dass dem Programm scheinbar kein Terminal zugeordnet ist.
    ps aux | grep zeigt das Programm, allerdings ist in der Spalte wo sonst tty1 steht ein Fragezeichen. Was mache ich falsch?

    Antworten
  10. wie muss der Raspberry Pi Autostart Skript sein für fm si4703 ?
    fm si4703 skript
    Dieses Skript initialisiert das Modul, sodass es verwendet werden kann (es muss nach jedem Neustart muss neu initialisiert werden, es würde also Sinn machen das Programm in den Autostart zu setzen

    bitte um hilfe

    Antworten
  11. wenn ich versuche das Skript zu starten erscheint die Fehlermeldung:
    import: not found
    gibt es eine Vorgehensweise damit das funktioniert?

    Antworten
  12. Ich möchte ein Konsolenprogramm ohne Bildschirmausgabe automatisch starten, es gibt nur eine Tastatur. Innerhalb eines Pascal-Programms wird dann über unit linux/fpSystem() das Programm „mpg123 + URL“ aufgerufen bzw. mit „kill“ beendet (WLAN Radio halt).
    Mein eigenes Programm shiftet eigentlich nur ein paar voreingestellte Sender durch.

    Ich habe alle Varianten von .bash.rc … rc.local … cron getestet.
    Nichts geht.
    Programme ohne Tastaturabfrage „mpg123 URL &“ geht. Mit Monitor/SSH gehts auch.

    Es muss also an der Eingabe liegen.
    Was ist zu tun? Das Problem haben ja auch andere hier in ähnlicher Form (sven).

    Ich versteh den Fehler nicht, weil der Raspi ja eigentlich ein Bastelrechner ist, der nicht unbedingt ein Monitor braucht.

    Danke

    Antworten
  13. Hallo,

    wenn ich ein Python Programm nach dem booten starten möchte,
    klappt das mit desemTutorial nicht…
    Das Programm liegt in /var/www/programm.py
    Muss ich Python 3.4 extra starten und wenn ja, wie ?

    Gruß
    pek

    Antworten
    • Wie versuchst du es denn zu starten? Hast du die Header im Python Skript gesetzt, sodass klar ist, wie es ausgeführt werden soll und ggf. Rechte zugewiesen?

      Antworten
    • Das sollte passen. Rufst du es mittels /absoluter/pfad/zum/skript.py auf? Ggf. kannst du es mit python3 /absoluter/pfad/zum/skript.py probieren.

      Antworten
  14. Der komplette Pfad steht drin, inkl. python3
    Leider auch kein Erfolg ( ich hatte das 3 nicht dabei)
    Habe auch die „Default-Start“ Zeile um den Level 6 ergänzt (bei Stop rausgenommen)
    aber auch das geht nicht.

    Allerdings versucht er das Programm zu starten, wenn ich den Start Befehl im Terminal eingebe.
    Er bringt dann eine Fehlermeldung, dass ine Textdatei nicht gefunden wird.
    Allerdings ist die Datei da und wird bei normalem Programmstart via Python3 IDLE auch gefunden und gelesen…

    Antworten
  15. Ich habe jetzt auch mal Probeweise in die /etc/crontab folgende Zeile eingefügt:
    @reboot pek python3 /var/www/dateiname.py

    … geht aber auch nicht…

    Irgendwie geht es nicht weiter

    Gruß
    pek

    Antworten
  16. Gelöst:

    Im Terminal crontab -e
    folgende Zeile eingefügt:

    @reboot "user" /usr/bin/python3 /mein/pfad/zum/script/script.py /dev/null 2>&1

    Im Script selbst müssen dann das Shebang

    #!/usr/bin/python3

    – und das war der Fehler –
    ALLE Pfade zu Dateien die gelesen oder geschrieben werden komplett angegeben werden,
    auch die zur Datenbankanbindung.

    Gruß
    pek

    Antworten
  17. Hallo,
    ich versuche,mit dem Skript, ein kleines Python Programm zu starten. Allerdings kommt bereits beim testen die Fehlermeldung:„ … /root/IP.py(das Programm das ich starten will) : Permisson denied“. Im Programm verwende ich ein paar GPIOs. Braucht das Skript extra rechte, und wenn ja wie gebe ich die dem Programm?

    Antworten

Hinterlasse einen Kommentar

Deine Email Adresse wird nicht veröffentlicht.

Blog abonnieren

Abonniere Tutorials-RaspberryPi, um kein Tutorial mehr zu verpassen!