staging.inyokaproject.org

Units mit Udev starten

Status: Ungelöst | Ubuntu-Version: Xubuntu 18.04 (Bionic Beaver)
Antworten |

matze31

Anmeldungsdatum:
25. Oktober 2015

Beiträge: 795

Ich möchte mittels Udev eine eigene Units starten, da ich auf der Ubuntuusers wiki (udev) Seite nichts gefunden habe, habe ich im Netz folgendes gefunden:

ENV{SYSTEMD_WANTS}="mein.service

Ist das fachlich ok?

Berlin_1946 Team-Icon

Supporter, Wikiteam

Anmeldungsdatum:
18. September 2009

Beiträge: 10477

matze31 schrieb:

... da ich auf der Ubuntuusers wiki (udev) Seite nichts gefunden habe,

Schau mal hier- udev

matze31

(Themenstarter)

Anmeldungsdatum:
25. Oktober 2015

Beiträge: 795

Hab mir die Seite schon paar mal durchgelesen, leider finde ich zu meiner Frage nicht den richtigen Abschnitt. Ist mein Vorschlag von oben richtig?

kB Team-Icon

Supporter, Wikiteam
Avatar von kB

Anmeldungsdatum:
4. Oktober 2007

Beiträge: 9837

matze31 schrieb:

[…]

ENV{SYSTEMD_WANTS}="mein.service

Ist das fachlich ok?

Nein. Rein syntaktisch fehlt das schließende Anführungszeichen.

Semantisch kann man mit ENV{key} Eigenschaften des Gerätes (device property value) abfragen oder auch setzen. Üblicherweise benutzt man aber den Operator += statt =. Das startet aber kein Programm oder systemd-Unit. Bestenfalls gibt es eine systemd-Unit, welche die Eigenschaftes des Gerätes prüft und darauf reagiert. Die Kommunikation zwischen udev als Teil von systemd und systemd ist zickig: Oft verirren sich Anwender und Programmierer von systemd in der unbarmherzigen und vermutlich endlosen Quotierwüste.

Berlin_1946 Team-Icon

Supporter, Wikiteam

Anmeldungsdatum:
18. September 2009

Beiträge: 10477

matze31 schrieb:

leider finde ich zu meiner Frage nicht den richtigen Abschnitt. Ist mein Vorschlag von oben richtig?

ENV{SYSTEMD_WANTS}="mein.service"

Steht das ohne das 2. " im

habe ich im Netz folgendes gefunden:

😇 eine Minute zu spät ☺

matze31

(Themenstarter)

Anmeldungsdatum:
25. Oktober 2015

Beiträge: 795

Sorry habe das Anführungsstrich vergessen, in meiner UDEV steht es mit da.

Aber das funktioniert aber, heißt USB Stick wird eingesteckt und die Units wird gestartet.

Wie macht man das korrekt? Mit "Run+=..."?

matze31

(Themenstarter)

Anmeldungsdatum:
25. Oktober 2015

Beiträge: 795

Ich stelle, nochmal die Frage, wie muss die UDEV aussehen, damit ich per Udev eine UNIT starten kann?

kB Team-Icon

Supporter, Wikiteam
Avatar von kB

Anmeldungsdatum:
4. Oktober 2007

Beiträge: 9837

matze31 schrieb:

[…] per Udev eine UNIT starten

udev ist nicht dafür vorgesehen, eine systemd-unit zu starten.

Du hast diese Möglichkeiten:

  1. Eine udev-Regel kann ein kurz laufendes Programm starten. Dazu dient das Schlüsselwort RUN. Das Programm könnte auch systemctl start sein.

  2. Eine udev-Regel kann mit einer bereits laufenden systemd-unit kommunizieren, z.B. über ENV{key}. Das ist tricky und man verirrt sich leicht in der Quotierwüste.

  3. Eine udev-Regel kann mit systemd selbst kommunizieren und dieses auffordern, gemäß einer bereits aktiven Vorlage (template unit) für das aktuelle Gerät eine Unit zu generieren. Dazu sind, je nach Situation, in udev-Regeln die Schlüsselworte ENV, TAG und RUN hilfreich.

Deine Frage ist in der gestellten Allgemeinheit nicht konkret zu beantworten.

matze31

(Themenstarter)

Anmeldungsdatum:
25. Oktober 2015

Beiträge: 795

Konkret geht es darum, wenn ich ein USB Stick/Festplatte einstecke soll es ein Python Script starten, das geht aber nur über Units, weil das Python Script "länger dauert" und sich dann gleich beendet wenn ich es in Udev über "run+=" starte. Deshalb möchte ich damit eine Units starten. Mein Vorschlag von oben hat aber 1 Jahr lang funktioniert, warum ist der so extrem falsch?

kB Team-Icon

Supporter, Wikiteam
Avatar von kB

Anmeldungsdatum:
4. Oktober 2007

Beiträge: 9837

matze31 schrieb:

[…] Mein Vorschlag von oben hat aber 1 Jahr lang funktioniert

Das ist doch prima! Was also ist Dein Problem?

warum ist der so extrem falsch?

Er entspricht meiner Möglichkeit 2 und ist daher grundsätzlich überhaupt nicht falsch. Meine Beschreibungen waren „tricky“ und „zickig“, aber wenn es bei Dir funktioniert, spricht doch nichts dagegen. Was also ist Dein Problem?

matze31

(Themenstarter)

Anmeldungsdatum:
25. Oktober 2015

Beiträge: 795

kB

Was also ist Dein Problem?

Problem habe ich keins, nur das war nochmal eine Bestätigung,dass es nicht falsch ist, denn wenn ich etwas mache, dann sollte es schon richtig sein. Vielen Dank.

Edit: habe in dem Zusammenhang herausgefunden, dass wenn man über UDEV ein Script startet, dass es dann nur 90 Sekunden läuft, dann wird es automatisch beendet und die UDEV wieder freigegeben. Jedenfalls bei Raspbian ist das so. Deshalb kann ich kein Script über UDEV starten was länger wie 90 Sekunden läuft. Alles bisschen kompliziert...

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13242

matze31 schrieb:

Problem habe ich keins, nur das war nochmal eine Bestätigung,dass es nicht falsch ist, denn wenn ich etwas mache, dann sollte es schon richtig sein.

Überraschenderweise gibt es auch in der sehr logiklastigen IT oft Situationen, in denen es nicht das eine richtige oder falsche Vorgehen gibt. Oftmals hängt es von mehreren Faktoren ab und oft ist es auch egal, welche der "richtigen" Lösungen man wählt.

Edit: habe in dem Zusammenhang herausgefunden, dass wenn man über UDEV ein Script startet, dass es dann nur 90 Sekunden läuft, dann wird es automatisch beendet und die UDEV wieder freigegeben. Jedenfalls bei Raspbian ist das so. Deshalb kann ich kein Script über UDEV starten was länger wie 90 Sekunden läuft. Alles bisschen kompliziert...

Du kannst immer noch forken bzw. Dein Skript dämonisieren. Da gibt es bestimmt auch etwas für Python-Programme.

matze31

(Themenstarter)

Anmeldungsdatum:
25. Oktober 2015

Beiträge: 795

rklm

Du kannst immer noch forken bzw. Dein Skript dämonisieren. Da gibt es bestimmt auch etwas für Python-Programme.

Ok klingt interessant. Eventuell hat jemand eine Idee.

rklm Team-Icon

Projektleitung

Anmeldungsdatum:
16. Oktober 2011

Beiträge: 13242

matze31 schrieb:

rklm

Du kannst immer noch forken bzw. Dein Skript dämonisieren. Da gibt es bestimmt auch etwas für Python-Programme.

Ok klingt interessant. Eventuell hat jemand eine Idee.

Das ist jetzt nicht so schwer, oder?

matze31

(Themenstarter)

Anmeldungsdatum:
25. Oktober 2015

Beiträge: 795

Vielen Dank. Also könnte ich mit einen "daemonize" Script ein anderes Python Script starten und es läuft dann im Hintergrund, oder wie muss man das verstehen?

Antworten |