Gefällt dir dieser Artikel?

Raspberry Pi: Autostart-Skript erstellen

erschienen in der Kategorie Technik, am 19.01.2013
Schnatterente
Ich habe bei den Ausführungen zu meinem Raspberry Pi RSS Reader "RasPi RSS" und dem HD44780 Display eine wichtige Kleinigkeit übersehen. Ich habe nämlich vergessen zu erklären, wie man unter Linux ein Programm zur Autostart-Anwendung macht. Glücklicherweise hat Marcel noch einmal danach gefragt, also kann ich das jetzt nachholen.

Der einfachste Weg, Linux dazu zu bringen, dass es eine Anwendung beim Hochfahren startet, ist ein entsprechendes Init.d Skript zu schreiben und dieses zu einem Runlevel hinzuzufügen. Im Falle des RSS Readers macht das natürlich besonders viel Sinn, denn man will sich ja nicht jedes Mal erst per SSH mit dem Raspberry Pi verbinden müssen, um die Anwendung zu starten.

In den meisten Linuxdistributionen findet man unter /etc/init.d/ verschiedene Skripte, die gebraucht werden um Dienste zu starten, zu beenden oder ihren Status abzufragen. Es kann nicht schaden sich in einmal umzusehen, was da schon so liegt, manchmal kann man nämlich Probleme lösen, indem man einen Dienst mithilfe des Init-Skriptes anhält oder neu startet. Hat man zum Beispiel Netzwerkprobleme, kann man den Network-Manager mittels des Befehls /etc/init.d/NetworkManager restart als root Benutzer neu starten. Dies sei aber nur am Rande erwähnt. Um selbst eine Anwendung während des Bootvorgangs zu starten, ist es sinnvoll selbst so ein Init-Skript zu erstellen.

Für den RSS-Reader soll das Skript raspi-rss heißen, also wird als Nutzer root eine entsprechende Datei, zum Beispiel mit dem nano Editor, erstellt: nano /etc/init.d/raspi-rss

Folgenden Inhalt schreibt (oder kopiert) man in die Datei:
#! /bin/sh
# /etc/init.d/raspi-rss

touch /var/lock/raspi-rss

case "$1" in
start)
echo "Starting RasPi RSS Reader ... "
/root/rss/rssreader.py > /dev/null &
;;
stop)
echo "Killing RasPi RSS Reader ..."
killall rssreader.py
;;
*)
echo "Usage: /etc/init.d/raspi-rss {start|stop}"
exit 1
;;
esac
exit 0

Der nano Editor wird durch die Tastenkombination Strg + x geschlossen. Die Nachfrage ob die Datei gespeichert werden soll bestätigt man mit j oder y. Nachfolgend muss das Skript noch ausführbar gemacht werden: chmod 755 /etc/init.d/raspi-rss

Damit alles funktioniert, müssen die Rahmenbedingungen natürlich stimmen. In meinem Fall liegt das RSS-Reader Skript unter /root/rss/ und heißt rssreader.py. Es ist wichtig, dass auch dieses Skript ausführbar ist (chmod +x /root/rss/rssreader.py). Bei abweichenden Dateinamen oder Pfaden muss das Skript natürlich angepasst werden.

Man sollte den RSS-Reader nun mit den Befehlen /etc/init.d/raspi-rss start starten und mittels /etc/init.d/raspi-rss stop wieder beenden können.

Damit das Programm beim Booten des Linux Systems ausgeführt wird, muss es noch zu einem Runlevel hinzugefügt werden. Je nach Linux Distribution kann sich der Befehl hierfür unterscheiden. Auf dem Debian-basierten Linux des Raspberry Pi erreicht man dies durch Eingabe von: update-rc.d raspi-rss defaults

Beim nächsten Neustart des Systems sollte die Anwendung automatisch starten.

Geschnatter

5 Kommentare, selbst mitschnattern << < Seite 1/1 > >>
jason, am 26.01.2013 um 08:48 Uhr
what a fantastic project thank you so much for sharing the code and install info. I had the exact same idea and when I searched for feedparser lcd raspberry pi came up with your blog. As a suggestion what about an option to show date and time ? might add a PIR to the lcd backlight and have this a bedside clock cheers J
Antwort: Thank you, Jason. It shouldn't be that hard to show the date and time on the display. Just modify my code as you like. I think you will find all needed information in the python documentation and by using Google. You are always welcome to ask.
Anonym, am 27.07.2013 um 18:55 Uhr
Danke für den ausführlichen Beitrag.
Als Linux-Neuling hab ich zwei Fragen:
1.
Ich erhalte die Meldung : touch: kann "/var/lock/xxx" nicht berühren, keine Berechtigung. Ich dachte init.d Scripte werden als root ausgeführt. Was tun?
2.
Das zu startende Programm benötigt Zugriff auf eine Datei, die nur von root gelesen werden darf. Es wird aber ein Laufzeitfehler ausgelöst. Woran liegt das wohl?

Bin dankbar für unterstützung.

fupi
Antwort: Hallo, normalerweise sollte das Skript mit Root-Rechten ausgeführt werden und root hat eigentlich auch Schreibzugriff auf /var/lock. Hast du das Skript zu einem Runlevel hinzugefügt? Wenn du magst, kannst du mir den Code auch mailen, dann schau ich es mir mal an.
Hans Otto, am 17.11.2014 um 19:36 Uhr
Hallo, das RSS-Programm ist wirklich sehr schön, ebenso wie die damit verbundene Anleitung zur Nutzung des Displays. Funktioniert auch sehr gut, nur hier habe ich Probleme: Das .py liegt bei mir ganz oben, d.h. beim Raspi in /home/pi. Beim Kommando sudo /etc/init.d/raspi-rss start startet das Programm nicht, sondern zeigt Zeile 2: import not found usw. also startet das py nicht. Trage ich statt dessen sudo python xy.py ein, startet es, aber so solls ja nicht sein und ich kann es auch nicht stoppen. Wie bekomme ich das py ausführbar?
Danke, Hans
Hans Otto, am 19.11.2014 um 12:23 Uhr
Danke, fast. Aber jetzt hab ich es: Es fehlt noch der shebang-Eintrag #!/usr/bin/env python (auch wenn der wie ein Kommentar aussieht) und dann geht der Start als root mit ./xy.py
Sascha, am 04.08.2015 um 05:04 Uhr
Hallo, vielen Dank für das tolle Script. Bis auf eine Kleinigkeit, hat es auf Anhieb funktioniert. Ich konnte das Programm nicht mit dem stop Befehl beenden.
Erst folgende Änderung von
" killall rssreader.py "
zu
" ps -ef | grep " rssreader.py " | awk '{print $2}' | xargs sudo kill "
brachte das gewünschte Ergebnis.