udev-Problem: sleep im Skript verhindert automatisches Einbinden von USB-Pen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
Benutzeravatar
Quilmes
Beiträge: 87
Registriert: 11.04.2008 23:25:52

udev-Problem: sleep im Skript verhindert automatisches Einbinden von USB-Pen

Beitrag von Quilmes » 29.06.2020 15:14:24

Hallo,

auf meinem Buster bin ich auf ein seltsames Verhalten gestoßen. Beim Einstöpseln eines USB-Sticks wird dieser normalerweise automatisch eingebunden unter /media/user/UUID und der Dateimanager (Nemo unter LXDE) gestartet.

Ich rufe nun über eine udev.rule ein Skript auf, wenn ein spezieller Stick eingesteckt wird:

Code: Alles auswählen

KERNEL=="sd?1", SUBSYSTEMS=="usb", ATTRS{idVendor}=="0123", ATTRS{idProduct}=="4567", ACTION=="add", RUN+="/home/user/Myscript.sh"
Das Skript wird auch gestartet, z.B. werden Dateieinträge erzeugt:

Code: Alles auswählen

#!/bin/bash
/bin/date >>/home/user/datetest
/bin/date >>/home/user/datetest
der Stick wird gemountet und Nemo startet

Wenn ich aber dazwischen ein sleep aufrufe:

Code: Alles auswählen

#!/bin/bash
/bin/date >>/home/user/datetest
/bin/sleep 5s
/bin/date >>/home/user/datetest
werden die Einträge mit 5s Zeitdifferenz erzeugt, aber der Stick nicht mehr automatisch gemountet und Nemo nicht gestartet.
Hat irgendwer eine Erklärung parat?
Die deutsche Rechtschreibung ist Freeware, d.h. Du darfst sie kostenlos nutzen. Allerdings ist sie keine freie Software, d.h. Du darfst sie nicht ändern oder in veränderter Form weitergeben.

Benutzeravatar
Livingston
Beiträge: 1364
Registriert: 04.02.2007 22:52:25
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: 127.0.0.1

Re: udev-Problem: sleep im Skript verhindert automatisches Einbinden von USB-Pen

Beitrag von Livingston » 29.06.2020 21:09:54

Ich kann nicht viel Qualifiziertes beitragen, aber soweit ich mitbekommen habe, ist sleep in udev-Rules gaaar nicht angesagt, da das Timing des udev-demon (und vermutlich auch das von systemd) versaut wird. Bei ähnlichen Problemen wird immer darauf verwiesen, ein Flag, eine temporäre Datei oder ähnliches einzurichten und extern abzufragen.
Sorry, mehr hab ich nicht dazu, aber ist vielleicht ein Ansatz.

Benutzeravatar
Tintom
Moderator
Beiträge: 3029
Registriert: 14.04.2006 20:55:15
Wohnort: Göttingen

Re: udev-Problem: sleep im Skript verhindert automatisches Einbinden von USB-Pen

Beitrag von Tintom » 29.06.2020 22:22:34

Der Parameter RUN ist gar nicht für eine lange Laufzeit ausgelegt:
man udev hat geschrieben:RUN{type}
Add a program to the list of programs to be executed after processing all the rules for a specific event, depending on
"type":

"program"
Execute an external program specified as the assigned value. If no absolute path is given, the program is expected to
live in /lib/udev; otherwise, the absolute path must be specified.

This is the default if no type is specified.

"builtin"
As program, but use one of the built-in programs rather than an external one.

The program name and following arguments are separated by spaces. Single quotes can be used to specify arguments with spaces.

This can only be used for very short-running foreground tasks. Running an event process for a long period of time may block
all further events for this or a dependent device.
Besser wäre ein Flag mitzugeben und die Logik in eine Service-Unit von systemd auszulagern.

Antworten