Ich habe meinen Dienst hinzugefügt zusystemd(Ich verwende es auf einempi3), es sieht aus wie das:
[Unit]
Description=Oral-B BLE scanner service
Wants=network-online.target
After=network-online.target
StartLimitBurst=10
StartLimitIntervalSec=10
Requires=bluetooth.target
[Service]
Type=simple
WorkingDirectory=/home/pi/scripts
ExecStart=/home/pi/scripts/scanOralB.py
Restart=always
RestartSec=10
[Install]
WantedBy=network-online.target
Ich habe einen symbolischen Link zur obigen Datei hinzugefügt in/lib/systemd/system. Ich habe den Dienst auch aktiviert. Nur um sicherzugehen, habe ich es überprüft.
pi@raspberrypi:~ $ systemctl is-enabled scanOralB.service
enabled
Wenn ich neu starte und den Status überprüfe, sieht es folgendermaßen aus:
pi@raspberrypi:~ $ sudo systemctl status scanOralB.service
* scanOralB.service - Oral-B BLE scanner service
Loaded: loaded (/home/pi/scripts/scanOralB.service; enabled; vendor preset: enabled)
Active: inactive (dead)
Wenn ich den Dienst manuell starte, funktioniert er einwandfrei. Kann mir jemand erklären, warum der Dienst nach dem Booten nicht gestartet wird? Ich erhalte keine zusätzliche Ausgabe vonmagazinctlentweder.
Antwort1
Es wird nicht gestartet, weil es von nichts, was gestartet wird, gewünscht wird.
[Installieren] WantedBy=Netzwerk-Online.ZielIch habe einen symbolischen Link zur obigen Datei hinzugefügt in/lib/systemd/system.
Das ist so ziemlich alles falsch.
- Die Unit-Datei sollteplatziertin
/etc/systemd/system
. Symbolische Links werden von systemd eigenwillig interpretiert und haben nicht die herkömmliche Dateisystemsemantik. Und/lib/systemd/system
es ist nicht der richtige Ort für handgeschriebene Unit-Dateien, die nicht aus Paketen stammen. - Die Unit-Datei sollte von etwas benötigt werden, das tatsächlich beim Bootstrap gestartet wird.
network-online.target
Ist normalerweise nicht der Fall.multi-user.target
Ist die übliche Wahl.graphical.target
Ist eine andere.