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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
#! /bin/sh ### BEGIN INIT INFO # Provides: noip # Required-Start: $syslog # Required-Stop: $syslog # Default-Start: 2 3 4 5 # Default-Stop: 0 1 6 # Short-Description: noip server # Description: ### END INIT INFO case "$1" in start) echo "noip wird gestartet" # Starte Programm /usr/local/bin/noip2 ;; stop) echo "noip wird beendet" # Beende Programm killall noip2 ;; *) echo "Benutzt: /etc/init.d/noip {start|stop}" exit 1 ;; esac exit 0 |
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
sudo /etc/init.d/NameDesSkripts start
sudo /etc/init.d/NameDesSkripts stop
sudo update-rc.d NameDesSkripts defaults
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.
54 Kommentare
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.
Hast du das Skript auch in den Autostart eingetragen, wie beschrieben?
natürlich 😉 alles gemacht wie oben beschrieben
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.
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.
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?
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?
Hey,
ich habe leider auch den Fehler das ich das Programm per Skript wunderbar aufrufen kann, jedoch passiert nach neustart nichts.
Um welches Programm handelt es sich? Du kannst alternativ noch Crontab anschauen.
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.
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
Hallo Hauschi,
das sind ein paar Skript-Parameter, die in den aller meisten Fällein einfach kopiert werden können. Wenn du genaueres wissen möchtest kann ich dir nur diesen Link empfehlen: https://wiki.debian.org/LSBInitScripts
LG Felix
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 🙂
Ich glaube dein Kommentar sollte sich auf ein anderes Tutorial beziehen (dieses: Raspberry Pi: WS2801 RGB LED Streifen anschließen und steuern)?
Du kannst im Grunde so viele LEDs (auch 20m) dami betreiben, solange die Stromversorgung ausreicht. Soweit ich mich erinnere unterstützt Hyperion inzwischen auch die WS2801 Streifen.
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?
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
wenn ich versuche das Skript zu starten erscheint die Fehlermeldung:
import: not found
gibt es eine Vorgehensweise damit das funktioniert?
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
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
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?
Im python Script habe ich die erste Zeile:
#!/usr/bin/env python
Die Rechte sind (zur Zeit) auf 777
Das sollte passen. Rufst du es mittels
/absoluter/pfad/zum/skript.py
auf? Ggf. kannst du es mitpython3 /absoluter/pfad/zum/skript.py
probieren.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…
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
Woher stammt das „pek“? Ist das Skript soweit in Ordnung?
pek ist der Name des Benutzers
Gelöst:
Im Terminal crontab -e
folgende Zeile eingefügt:
Im Script selbst müssen dann das Shebang
– und das war der Fehler –
ALLE Pfade zu Dateien die gelesen oder geschrieben werden komplett angegeben werden,
auch die zur Datenbankanbindung.
Gruß
pek
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?
PS. Die Echos werden ausgeführt
Root Rechte (sudo) sind für GPIOs nötig.
Kannst du bitte schreiben, wie man diese Root Rechte mit einbaut? Bei mir ist dasselbe Problem aufgetreten. Vielen, vielen Dank!
Dem Skript entweder die Rechte geben (sudo chmod +x skriptname.endung) oder mit sudo ausführen.
Guten Tag,
ich habe alles so wie in der Anleitung gemacht. Ja ich habe sudo verwendet. Ja ich habe nötige Rechte zugewiesen.
Trotzdem bekomme ich die ganze Zeit „Permission denied“.
Wo kann da der Fehler liegen?
Hey,
ich bekomme das mit dem Autostart irgendwie nicht so richtig hin.
mit Crontab, schaffe ich es nur, dass das Programm jede Minute neu gestartet wird. Ändere ich dann die * auf @reboot, passiert gar nix mehr.
Mit der oben beschriebenen Variante komme ich bis
sudo /etc/init.d/NameDesSkripts start
Das funktioniert sogar. Wenn ich dann
sudo update-rc.d NameDesSkripts defaults
eingebe, dann kommt nur ne neue Zeile. Dachte mir nix dabei. Nach dem Neustart funktionierte aber auch das nicht…
Was mach ich falsch?
Moin,
das Starten des scripts nach dem Booten funktioniert zwar, aber es bleibt der Bildschirm dunkel (am direkt angeschlossenen über HDMI und auch über Remoteverbindung). Das heisst, ich habe eine blackbox geschaffen, die fleissig arbeitet, sich aber nicht mehr anpassen lässt…
Gibts dafür ne Lösung (Autostart UND weiterhin Zugriff auf das System)?
Guten Tag,
sobald ich „sudo /etc/init.d/NameDesSkripts start“ eingebe, bekomme ich einen Fehler „no such file or directory“, mach ich was falsch? habe alles andere genauso abgetippt, kann wer helfen?
Bei beiden deiner Scipts fehlt ein Slash
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
Hallo ich habe alles 1:1 so gemacht wie oben beschrieben und erhalte wenn ich das Programm starten möchte immer die Fehlermeldung „not found“
pi@raspberrypi:~ $ sudo nano /etc/init.d/knauf
pi@raspberrypi:~ $ sudo /etc/init.d/knauf start
noip wird gestartet
/etc/init.d/knauf: 16: /etc/init.d/knauf: /usr/local/bin/knauf: not found
Bitte um Hilfe 🙂
Grüße Daniel
super dss erste Script was klappt !!
Hallo,
leider wird der Inhalt des Testskripts nicht angezeit
Ist nun wieder da 🙂
Super,
vielen Dank!
hallo Christoph,
dieses Problem hab ich auch, alles mögliche versucht, immer das gleiche Bild
Hast Du schon eine Antwort ?
MfG Peter
Hallo Felix,
ich lasse seit einiger Zeit über meinen Pi einen Teamspeak Server laufen.
Dein Tutorial hat mir schon viel geholfen.
Nur ist es jetzt zweimal vorgekommen, dass mein gesamtes Netzwerk ausgefallen ist und der TS dementsprechend nicht erreichbar war. Bei neustart des Systems startet alles, nur das NO-IP Skript nicht. Das habe ich 1zu1 von dir übernommen. Bei regulären Neustarts hat es auch immer super geklappt. Nur jetzt nicht mehr. kannst du mir helfen?
Hallo
folgendes problem:
habe ein kleinesprogramm das die Werte von einem bme280 temperatursensor in der Konsole ausgibt.
nun möchte ich, dass das Program beim Start sofort ausgeführt wird habe alles wie oben beschrieben gemacht.
mit dem befehl :
sudo /etc/init.d/NameDesSkripts start“ kann ich meine Konsolenanwendung auch starten.
leider Funktioniert es nicht nach dem start, hat einer eine idee wie ich das lösen kann?
Hi,
erst mal vielen Dank für die tolle Anleitung.
Ich möchte dieses Skript für ffmpeg nutzen
ich habe das gleiche Problem dass das Skript nach dem Neustart nicht öffnet.
Gebe ich: systemctl list-units –type=service
ein so erscheint auch ffmpeg.service aber er streamt nicht.
starte ich das skript manuel: sudo /etc/init.d/NameDesSkripts start
läuft es einwandfrei.
Weis jemand den Fehler ?
Gruß Tobias
Hallo meine Lieben, hoffe jemand kann mir helfen.
Habe auf meinem Raspy rasbian installiert und möchte gerne das eine officedatei nach dem hochfahren automatisch geöffnet wird.
Habe gar keinen Plan wie ich das machen kann.
Habe erst seit 2 Wochen mit der Materie was zu tun.
Bedanke mich für eure Hilfe Jungs.
Gruß Matthias
Hi Felix,
habe alles befolgt. Aber am Ende ging es etwas schnell. Habe den noip host aktiviert (hoffe ich). Allerdings lässt sich die addresse ….-hopto.org welche ich ausgewählt hatte nicht aufrufen, was verständlich ist, denn ich habe diese domain ja in keiner weise mit meinem netzwerk verbunden…
die ports habe ich in meiner wlan konfiguration jedoch freigeschaltet
Hallo ich habe versucht libreoffice zu starten. Wenn ich das Skript manuell starte, startet libre office, bei Neustart startet nichts
Sehr gute Anleitung. Hab damit ein Python Programm gestartet. Wenn ich das Programm im Terminal starte kann ich beobachten was passiert. An den Auswirkungen sehe ich dass es läuft. Wie kann ich das Programm nun im Terminal beobachten?
Ich möchte gerne Firefox-ESR automatisch starten lassen. Leider verweigerte mir das Terminal aber den Zugriff („Permission denied“). Daraufhin habe ich für die Datei (/usr/share/applications/firefox-esr.desktop) die Ausführrechte geändert, sodass diese jetzt von jedem ausführbar ist.
Wenn ich mein Skript aber nun starte bekomme ich folgende Ausgabe:
~ $ sudo /etc/init.d/FirefoxAutoStart start
Firefox wird gestartet
/usr/share/applications/firefox-esr.desktop: 1: /usr/share/applications/firefox-esr.desktop: [Desktop: not found
/usr/share/applications/firefox-esr.desktop: 2: /usr/share/applications/firefox-esr.desktop: ESR: not found
/usr/share/applications/firefox-esr.desktop: 3: /usr/share/applications/firefox-esr.desktop: Name[bg]=Firefox: not found
/usr/share/applications/firefox-esr.desktop: 4: /usr/share/applications/firefox-esr.desktop: Name[ca]=Firefox: not found
/usr/share/applications/firefox-esr.desktop: 5: /usr/share/applications/firefox-esr.desktop: Name[cs]=Firefox: not found
[…]
/usr/share/applications/firefox-esr.desktop: 72: /usr/share/applications/firefox-esr.desktop: GenericName[sv]=Webbläsare: not found
/usr/share/applications/firefox-esr.desktop: 73: /usr/share/applications/firefox-esr.desktop: X-GNOME-FullName=Firefox: not found
/usr/share/applications/firefox-esr.desktop: 74: /usr/share/applications/firefox-esr.desktop: Syntax error: „(“ unexpected
Also meines Erachtens kann er die Datei nicht finden, obwohl sie ja eigentlich existiert und auch im Dateimanager angezeigt wird.
Außerdem ist noch meine Frage ob ich diese Datei überhaupt ausführbar machen muss, im Falle von „noip“ hast du das ja auch nicht getan.
Ich war mal so frei und habe dieses kleine Skript wie folgt erweitert.
Getestet und funktioniert auch.
Hallo,
ich möchte gerne mit dem PI die Suvilianstation meiner Synology anzeigen lassen.
Dazu müsste nach dem Start der Browser starten und sich automatisch einloggen. Hat damit schon jemand erfahrung?
Hallo,
kann mir jemand weiter helfen? VLC wird gestartet über die Komando, funktioniert mit Fehlermeldung. Beim booten wir die Datei nicht gestartet.
pi@raspberrypi:~ $ sudo /etc/init.d/test start
TEST wird gestartet
VLC media player 3.0.12 Vetinari (revision 3.0.12-1-0-gd147bb5e7e)
[005a7b58] main libvlc error: cannot open config file (/root/.config/vlc/vlcrc): Permission denied
[0060a170] dbus interface error: Failed to connect to the D-Bus session daemon: Failed to connect to socket /tmp/dbus-PxIUqBXPDM: Verbindungsaufbau abgelehnt
[0060a170] main interface error: no suitable interface module
[005a7b58] main libvlc error: interface „dbus,none“ initialization failed
[005a7b58] main libvlc: VLC wird mit dem Standard-Interface ausgeführt. Benutzen Sie ‚cvlc‘, um VLC ohne Interface zu verwenden.
QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to ‚/tmp/runtime-pi‘
[006263b0] main interface error: no configuration directory
[005a7b58] main libvlc error: no configuration directory
case „$1“ in
start)
echo „TEST wird gestartet“
# Starte Programm
/usr/bin/vlc-wrapper ansage.xspf –repeat %U
;;
stop)
echo „TEST wird beendet“
# Beende Programm
killall /usr/bin/vlc
;;
*)
echo „Benutzt: /etc/init.d//usr/bin/vlc –started-from-file %U {start|stop}“
exit 1
;;
esac
exit 0