Seit Arch Linux komplett auf systemd umgestellt hat, gibt es die Datei /etc/rc.local nicht mehr. Will man trotzdem Befehle direkt beim Systemstart ausführen, kann man sich einen systemd Service schreiben.
Service schreiben
Services unter systemd sind viel einfacher aufgebaut, als die Startskripte unter SysVinit.
Die Services (egal ob aktiviert oder nicht), liegen im Verzeichnis /lib/systemd/system/. Dort kann man seine Services erstellen:
Ein simpler Service, welcher ein Befehl ausführt, der im Target multi-user (entspricht etwa dem Runlevel 2 unter SysVinit) geladen wird, sieht so aus:
#
# disablebluetooth.service
# systemd service: disable bluetooth at start
#
#########################################################################
[Unit]
Description=Disable Bluetooth
[Service]
Type=oneshot
ExecStart=/usr/sbin/rfkill block bluetooth
[Install]
WantedBy=multi-user.target
# EOF
Diese Beispieldatei ist ziemlich selbsterklärend. Beim betreten des Targets multi-user wird der Befehl unter ExecStart ausgeführt.
Wichtig ist, dass man den kompletten Pfad zum Programm/Skript angibt, weil $PATH nicht verfügbar ist. Man könnte jedoch auch bash -c
Sicherheit
Damit nach dem Erstellen des Services nicht andere Benutzer böse Befehle in den Service schreiben können, müssen noch die Berechtigungen passend gesetzt werden:
$ sudo chmod 644 /lib/systemd/system/disablebluetooth.service
$ ls -l /lib/systemd/system/disablebluetooth.service
-rw-r--r-- 1 root root 375 28. Feb 18:37 /lib/systemd/system/disablebluetooth.service
Service aktivieren
Da der Service noch nicht aktiviert ist, muss man dies noch tun:
ln -s '/usr/lib/systemd/system/disablebluetooth.service' '/etc/systemd/system/multi-user.target.wants/disablebluetooth.service'
Man sieht, dass systemctl einen Symlink im Verzeichnis /etc/systemd/system/multi-user.target.wants anlegt. Dies könnte man auch von Hand mittels ln -s machen.
Service starten
Der Service wird jetzt beim Betreten des Targets multi-user automatisch gestartet. Wer den Service jetzt sofort starten will, kann das so machen:
Links und weitere Informationen
- Systemd Service Configuration: http://www.freedesktop.org/software/systemd/man/systemd.service.html
Danke für die Anleitung, das war genau was ich gesucht habe 🙂
Eine kleine Anmerkung: selbsterstellte Systemd-Services gehören in den Ordner /etc/systemd/system
Hallo boernie
Bitte. 😉
Aha. Ok. Danke, das wusste ich nicht. Ich werde das bei Gelegenheit ändern.
Gruss
Emanuel
Die Services in /etc/systemd/system haben auch eine höhere Priorität. So kann man einen Dienst modifizieren, indem man eine gleichnamige Service-Datei in /etc/systemd/system anlegt. Diese wird dann anstatt des Systemdienstes gestartet 🙂
Oha! Steht das in irgend einer Manpage?
Du findest die Hirarchie unter ‘man systemd.unit’ im Abschnitt “Unit Load Path”
Ah cool. Danke.
Gern geschehen 🙂
Hab das gerade für meinen Twonkyserver gebraucht. Besten Dank für die Anleitung!
Bitte. Freut mich 🙂