Wie man ein Script oder einen Befehl als Root beim Systemstart ausführt
In diesem Beitrag zeige ich wie man mit systemd ein beliebiges Kommando oder Script zum Systemstart mit root Rechten ausführt. Ein Grundwissen, dass man bei der Automatisierung benötigt.
Wie man ein Script oder einen Befehl als Root beim Systemstart ausführt
In Zeiten von Automatisierung schreibt man gerne Scripte die Tasks ausführen und eventuell zum Systemstart bereits Jobs ausführen oder diese initialisiert. Insbesondere für Geräte ohne Interface das manuelle Benutzereingaben ermöglicht ist es nötig einen Prozess (Programm oder Script) beim Systemstart mit zu starten, meistens sogar mit root Rechten. Mit systemd ist das recht einfach zu bewerkstelligen. Als Testsystem verende ich ein aktuelles Debian 12 Betriebssystem.
Konkretes Beispiel
Ich habe ein Python Script, welches eine GPIO Schnittstelle ansteuert. Für einige Befehle in diesem Script sind root Rechte nötig, weshalb ich das gesamte Script als root ausführen möchte. Über das Terminal habe ich das Script soweit getestet und finalisiert. Die Ausgangslage ist nun folgende: nach einem Neustart des Systems muss ich über das Terminal einmalig den Befehl
python myscript.py
als root ausführen. Das Ziel soll nun sein, dass dies automatisch beim Hochfahren des Betriebssystems passiert. Der einzige manuelle Eingriff ist das Starten des Geräts (oder das fernsteuern der Stromzufuhr).
systemd Service anlegen
Im etc Ordner von Debian findet man im Unterordnet zu systemd einen Ordner mit Services (Dateien mit der Dateiendung *.service). Wir werden uns nun ebenfalls so ein Service erstellen.
Achtung: root Rechte erforderlich!
nano /etc/systemd/system/myscript.service
In der Datei fügt man folgenden Inhalt ein:
[Unit] Description=This is my Python script [Service] ExecStart=python /home/werner/myscript.py [Install] WantedBy=multi-user.target
Man muss genau zwei Dinge anpassen. Zum einen die Beschreibung (Description). Es wäre nett, wenn man genau beschreibt was dieses Service genau macht. Zum anderen gibt man den absoluten Pfad zum Script an (ExecStart) in diesem Fall das Script in meinem Benutzerverzeichnis.
Service starten
Das Service ist nun definiert, aber noch nicht aktiviert. Man muss dieses noch über systemd aktivieren. Das geht wie folgt:
systemctl enable myscript.service
Es folgt eine Bestätigung durch systemd. Das Script lässt sich später über systemd auch wieder recht komfortabel deaktivieren.
Fazit
Mit systemd lassen sich recht einfach Programme und Scripte schon bei Systemstart auch als root ausführen. Ein wichtiger Schritt um das System zu automatisieren und an die eigenen Bedürfnisse anzupassen.