Da ich oft in meinen Tutorials auf die einzelnen Methoden zum automatischen Starten von Scripten und Anwendungen nach einem Reboot des Raspberry Pi eingegangen bin, möchte ich die verschiedenen Autostart-Methoden hier zusammenfassen und aktuell halten. Der Artikel wurde für Raspberry Pi OS Bookworm (Debian 12) aktualisiert – wer einen Raspberry Pi 4 oder 5 mit dem aktuellen Betriebssystem betreibt, findet hier alle relevanten Methoden.
Es gibt mehrere Methoden um Programme, Dienste und Scripte beim Booten des Raspberry Pi automatisch starten zu lassen.
Die Auswahl der für euch geeigneten Methode richtet sich danach, zu welchem Zeitpunkt der automatische Start durchgeführt werden soll und ob ein Netzwerk oder grafischer Desktop benötigt wird.
- systemd Service – die moderne, empfohlene Methode für Dienste und Scripte, mit Abhängigkeiten, Logging und automatischem Neustart
- Die in /etc/rc.local hinterlegten „Autostarts“ werden am Ende des Startvorganges ausgeführt (in Bookworm nicht mehr standardmäßig aktiv)
- .desktop Dateien liegen im Home eines jeweiligen Benutzers und werden nach der Anmeldung am grafischen Desktop ausgeführt
- .bashrc Dateien liegen ebenfalls im Home eines Benutzers und werden bei jedem Anmelden via SSH oder Konsole ausgeführt
- Cronjobs mit @reboot eignen sich für einfache einmalige Befehle nach dem Neustart
Für Dienste und Scripte die zuverlässig starten müssen, Netzwerkabhängigkeiten haben oder bei einem Fehler neu gestartet werden sollen, ist systemd der klare Favorit. Für einfache Einzeiler reicht rc.local oder ein Cronjob. Desktop-Autostarts werden am besten über .desktop Dateien gelöst, da diese sowohl unter X11 als auch unter Wayland (Wayfire, labwc) funktionieren.
Wichtig: Falls ihr Scripte via Autostart aufruft, müssen diese das Recht haben ausgeführt zu werden (chmod +x MeinScript.sh).
Autostart mit systemd (empfohlen)
Seit Raspberry Pi OS Jessie ist systemd der Standard-Init-Prozess und die empfohlene Methode um eigene Dienste zu verwalten. Systemd bietet gegenüber rc.local und Init-Scripts klare Vorteile: Abhängigkeiten zu Netzwerk oder anderen Diensten lassen sich einfach definieren, der Dienst wird bei einem Absturz automatisch neu gestartet und alle Ausgaben werden im System-Journal protokolliert.
Eine systemd Service-Unit-Datei wird unter /etc/systemd/system/ angelegt:
|
1 |
sudo nano /etc/systemd/system/MeinDienst.service |
Der Inhalt einer einfachen Service-Datei sieht so aus:
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
[Unit] Description=Mein Autostart-Dienst After=network.target [Service] Type=simple User=pi WorkingDirectory=/home/pi ExecStart=/usr/bin/python3 /home/pi/mein_script.py Restart=on-failure RestartSec=10s [Install] WantedBy=multi-user.target |
Die wichtigsten Parameter im Überblick:
- After=network.target – startet den Dienst erst wenn das Netzwerk verfügbar ist
- User=pi – unter welchem Benutzer der Dienst läuft (pi, root oder ein eigener Benutzer)
- ExecStart – der Befehl der ausgeführt werden soll (immer absolute Pfade verwenden!)
- Restart=on-failure – startet den Dienst automatisch neu wenn er mit einem Fehler abbricht
- WantedBy=multi-user.target – der Dienst startet im normalen Mehrbenutzermodus
Gespeichert wird mit STRG+X, Y und ENTER. Danach den Dienst aktivieren und starten:
|
1 2 3 |
sudo systemctl daemon-reload sudo systemctl enable MeinDienst.service sudo systemctl start MeinDienst.service |
Den aktuellen Status und die Log-Ausgaben könnt ihr jederzeit prüfen:
|
1 2 |
sudo systemctl status MeinDienst.service sudo journalctl -u MeinDienst.service -n 50 |
Zum Deaktivieren des Autostarts:
|
1 |
sudo systemctl disable MeinDienst.service |
Autostart mit rc.local
Möchte man einfache Befehle oder Scripte beim Systemstart automatisch ausführen, kann man diese in die Datei /etc/rc.local eintragen. Wichtig: In Raspberry Pi OS Bookworm ist rc.local nicht mehr standardmäßig aktiv. Ihr müsst den zugehörigen systemd-Dienst zunächst aktivieren:
|
1 2 |
sudo systemctl enable rc-local.service sudo systemctl start rc-local.service |
Prüft ob die Datei /etc/rc.local vorhanden ist, falls nicht legt sie an:
|
1 |
sudo nano /etc/rc.local |
Hier ein Beispiel – am Ende der Datei muss immer exit 0 stehen, eure Einträge müssen daher davor gesetzt werden. Einträge in rc.local werden immer mit Root-Rechten ausgeführt:
|
1 2 3 4 5 6 7 8 9 10 11 12 |
#!/bin/sh -e # # rc.local # # This script is executed at the end of each multiuser runlevel. # Make sure that the script will "exit 0" on success or any other # value on error. /usr/bin/python3 /home/pi/mein_script.py # ein Python Script /usr/local/bin/script.sh # ein Shellskript exit 0 |
Für neue Projekte empfehlen wir systemd zu verwenden – rc.local hat keinen automatischen Neustart bei Fehlern und kein komfortables Logging.
Desktop Autostart mit .desktop Dateien
Raspberry Pi OS Bookworm nutzt je nach Modell und Einstellung unterschiedliche Desktop-Umgebungen: X11 mit LXDE, Wayland mit Wayfire oder Wayland mit labwc (Standard seit Oktober 2024 auf Pi 4 und neuer). Die zuverlässigste Methode für Desktop-Autostarts die mit allen drei Varianten funktioniert sind .desktop Dateien im Autostart-Verzeichnis des Benutzers.
Das Verzeichnis anlegen falls es noch nicht existiert:
|
1 |
mkdir -p ~/.config/autostart |
Eine neue .desktop Datei erstellen:
|
1 |
nano ~/.config/autostart/MeinAutostart.desktop |
Eine Desktop-Datei hat folgendes Format:
|
1 2 3 4 5 6 |
[Desktop Entry] Name=Mein Autostart-Script Comment=Startet nach dem Desktop-Login Type=Application Exec=/home/pi/mein_script.sh Terminal=false |
Mit Terminal=true öffnet sich ein Terminal-Fenster wenn das Script ausgeführt wird, mit false läuft es im Hintergrund. Der Autostart gilt nur für den jeweiligen Benutzer dessen Home-Verzeichnis verwendet wird.
Für einen systemweiten Desktop-Autostart (alle Benutzer) legt die .desktop Datei unter /etc/xdg/autostart/ ab.
Cronjob für Autostarts
Cron bietet einen speziellen Job-Typ für Aufgaben die direkt nach einem (Neu-)Start ausgeführt werden sollen. Cronjobs können entweder für einen bestimmten Benutzer oder systemweit angelegt werden. Zur Anlage eines Benutzer-Jobs reicht es crontab -e aufzurufen:
|
1 |
crontab -e |
Ein Beispiel zum Ausführen eines Scripts nach dem Neustart:
|
1 |
@reboot /home/pi/MeinScript.sh |
Das vorangestellte @reboot definiert, dass dieser Befehl nach jedem (Neu-)Start einmal automatisch ausgeführt wird. Für systemweite Cronjobs wird der Eintrag in /etc/crontab vorgenommen – dort muss zusätzlich der Benutzername angegeben werden:
|
1 |
@reboot pi /home/pi/MeinScript.sh |
Cronjobs eignen sich gut für einfache, unkritische Aufgaben. Für Dienste mit Netzwerkabhängigkeiten oder automatischem Neustart bei Fehlern ist systemd die bessere Wahl.
Init-Scripts (veraltet)
SysV-Init-Scripts unter /etc/init.d/ und der Befehl update-rc.d sind in Raspberry Pi OS Bookworm veraltet und werden nicht mehr empfohlen. Wer noch alte Init-Scripts betreibt, sollte diese auf systemd Service Units migrieren. Die Struktur und Befehle aus älteren Anleitungen funktionieren zwar noch teilweise durch eine Kompatibilitätsschicht, sind aber nicht zukunftssicher. Verwendet für neue Projekte immer systemd.
Benötigt ihr passende Hardware für eure Raspberry Pi Projekte? Auf Amazon findet ihr Raspberry Pi Zubehör, SD-Karten und Netzteile in der passenden Ausführung.
