underscore69
Anmeldungsdatum: 22. Dezember 2017
Beiträge: Zähle...
|
Ich versuche verzweifelt, einen systemd-service automatisch mit udev zu starten und bekomme es nicht hin...
Hintergrund: Ich habe einen Service geschrieben, der via USB (seriell) Daten über MQTT austauscht. Da es mehrere USB Devices geben kann, müssen auch mehrere services gestartet werden können. Mit dem Device-Namen als Parameter.
Mache ich das manuell (systemctl start myservice@ttyACM0.service) klappt es super. Nun würde ich das gern automatisch haben, sobald das device eingesteckt wird. Meine Konfiguration soweit: systemd: # cat /lib/systemd/system/mydevice@.service
[Unit]
Description=MyDevice service
After=network.target
After=syslog.target
StopWhenUnneeded=true
[Install]
WantedBy=dev-ttyACM?.device
[Service]
Type=simple
ExecStart=/home/user/dev/mydevice/myexec /dev/%I
udev:
#/etc/udev/rules.d/95-mydevice.rules
ACTION=="add", KERNEL=="ttyACM?", SUBSYSTEMS=="usb", TAG+="systemd", ENV{SYSTEMD_WANTS}="mydevice@%k.service" Starte ich ein Skript anstatt des Services, wird es problemlos ausgeführt. Ich wäre echt dankbar für den Tipp, wo mein Fehler liegt...
|
BillMaier
Supporter
Anmeldungsdatum: 4. Dezember 2008
Beiträge: 6472
|
Kannst du den service mit systemctl starten / ausführen?
Ich glaub ich bin reif fürs Bett. Wer lesen kann ist klar im Vorteil...
|
BillMaier
Supporter
Anmeldungsdatum: 4. Dezember 2008
Beiträge: 6472
|
Vielleicht findest du hier eine Lösung? https://bbs.archlinux.org/viewtopic.php?id=181080 Schon mal getestet, ob deine bisherige Lösung "hart" funktioniert, also ohne Variablen-Angabe? Oder mit ' statt " ? (Wie du merkst weiß ich es nicht, sondern rate - aber vll. ist ja was dabei für dich.)
|
BillMaier
Supporter
Anmeldungsdatum: 4. Dezember 2008
Beiträge: 6472
|
Beim stöbern finde ich auch, dass es ein ENV{SYSTEMD_WANTS}+="test.service" braucht.
|
underscore69
(Themenstarter)
Anmeldungsdatum: 22. Dezember 2017
Beiträge: 11
|
Hmmm, das += hat nichts gebracht, aber er mag zB nicht das ? im service-file...
[Install]
WantedBy=dev-ttyACM?.device
|
underscore69
(Themenstarter)
Anmeldungsdatum: 22. Dezember 2017
Beiträge: 11
|
Hmmm, jetzt bin ich soweit, dass systemd den service installiert. Starten tut er ihn dennoch nicht: Created symlink /etc/systemd/system/dev-ttyACM.device.wants/mydevice@.service → /lib/systemd/system/mydevice@.service. Das service-file:
[Unit]
Description=MyDevice service
After=network.target
After=syslog.target
StopWhenUnneeded=true
BindsTo=dev-ttyACM%i.device
After=dev-ttyACM%i.device
[Install]
WantedBy=dev-ttyACM%i.device
[Service]
Type=simple
ExecStart=/home/user/dev/mydevice/mydevice /dev/%I Vorher konnte ich den service wenigstens manuell starten, das geht nun auch nicht mehr ☹
Syslog:
ec 23 00:17:12 desktop systemd[1]: dev-ttyACMttyACM0.device: Job dev-ttyACMttyACM0.device/start timed out.
Dec 23 00:17:12 desktop systemd[1]: Timed out waiting for device dev-ttyACMttyACM0.device.
Dec 23 00:17:12 desktop systemd[1]: Dependency failed for MyDevice service.
Dec 23 00:17:12 desktop systemd[1]: mydevice@ttyACM0.service: Job mydevice@ttyACM0.service/start failed with result 'dependency'.
Dec 23 00:17:12 desktop systemd[1]: dev-ttyACMttyACM0.device: Job dev-ttyACMttyACM0.device/start failed with result 'timeout'.
|
encbladexp
Ehemaliger
Anmeldungsdatum: 16. Februar 2007
Beiträge: 17442
|
Gibt es das entsprechende .device unit? Ich vermute das hat einen leicht abweichenden Namen, und daher geht es nicht ⇒ Timeout. mfg Stefan
|
underscore69
(Themenstarter)
Anmeldungsdatum: 22. Dezember 2017
Beiträge: 11
|
Wenn das USB-Gerät steckt:
user@desktop:/lib/systemd $ systemctl --all --full -t device | grep ACM
dev-ttyACM0.device loaded active plugged CDC RS-232 Emulation Demo
sys-devices-pci0000:00-0000:00:14.0-usb3-3\x2d10-3\x2d10.4-3\x2d10.4.4-3\x2d10.4.4:1.0-tty-ttyACM0.device loaded active plugged CDC RS-232 Emulation Demo
|
encbladexp
Ehemaliger
Anmeldungsdatum: 16. Februar 2007
Beiträge: 17442
|
Stimmt, das würde passen. mfg Stefan
|
underscore69
(Themenstarter)
Anmeldungsdatum: 22. Dezember 2017
Beiträge: 11
|
Also sobald ich den service das erste Mal über "systemctl start mydevice@ttyACM0" gestartet habe, wird er beim An- und Abstecken offensichtlich nochmal gestartet.
Allerdings habe ich gerade im log festgestellt, dass er segfaultet. Was merkwürdig ist, da ich ihn als executable fehlerfrei ausführen kann... Aber zum. der service zeigt Zuckungen...
|
underscore69
(Themenstarter)
Anmeldungsdatum: 22. Dezember 2017
Beiträge: 11
|
Also ich habe den service mittlerweile soweit, dass er beim anstecken startet:
[Unit]
Description=MyDevice service
After=network.target
After=syslog.target
StopWhenUnneeded=yes
BindsTo=dev-%i.device
After=dev-%i.device
[Install]
WantedBy=dev-ttyACM%i.device
[Service]
Type=simple
ExecStart=/home/user/dev/mydevice/mydevice -v /dev/%I Zwei Sachen funktionieren noch nicht: 1) Ist das USB Device beim boot angesteckt, läuft der service nicht 2) Stecke ich das device ab, wird der service nicht beendet :/
|
encbladexp
Ehemaliger
Anmeldungsdatum: 16. Februar 2007
Beiträge: 17442
|
Ich würde Vorschlagen die After Abhängigkeiten in eine Zeile zu schreiben, und diese Abhängigkeiten dann durch Leerzeichen zu trennen. Das sollte am Verhalten nichts ändern, ist aber IMHO lesbarer. Zum Thema: Wie sieht im Journal das abstecken von einem Gerät aus? Verschwindet dann dabei auch das entsprechende Device Unit? mfg Stefan
|
underscore69
(Themenstarter)
Anmeldungsdatum: 22. Dezember 2017
Beiträge: 11
|
Das Journal enthält keinen Eintrag zum Abstecken. Der letzte Eintrag zu dem service kommt vom Start und der service ist active and running.
|
encbladexp
Ehemaliger
Anmeldungsdatum: 16. Februar 2007
Beiträge: 17442
|
Zumindest vom Kernel muss was kommen wenn ein Gerät abgesteckt wird, sonst wäre das schon arg komisch. mfg Stefan
|
underscore69
(Themenstarter)
Anmeldungsdatum: 22. Dezember 2017
Beiträge: 11
|
Im syslog steht schon was:
Dec 25 13:40:22 desktop kernel: [ 166.738236] usb 3-10.4.1: USB disconnect, device number 15
Dec 25 13:40:22 desktop kernel: [ 166.738261] cdc_acm 3-10.4.1:1.1: urb 1 failed submission with -19
Dec 25 13:40:22 desktop kernel: [ 166.738300] cdc_acm 3-10.4.1:1.1: urb 2 failed submission with -19
Dec 25 13:40:22 desktop kernel: [ 166.738339] cdc_acm 3-10.4.1:1.1: urb 3 failed submission with -19
Dec 25 13:40:22 desktop kernel: [ 166.738381] cdc_acm 3-10.4.1:1.1: urb 4 failed submission with -19
Dec 25 13:40:22 desktop kernel: [ 166.740368] cdc_acm 3-10.4.1:1.1: urb 5 failed submission with -19
|