udev shell befehl wird nicht ausgeführt

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
ren22

udev shell befehl wird nicht ausgeführt

Beitrag von ren22 » 20.03.2013 13:00:17

hallo

ich habe eine command line die am prompt funktioniert aber nicht als udev regel.
wer kann mir sagen was ich falsch mache

Code: Alles auswählen

'/usr/bin/kill $(ps -ef | grep '[l]cd4linux' | awk '{print $2}')'
<--- dieser command line funktioniert am prompt
aber nicht wenn ich das ganze als udev regel ausführen lassen möchte

/etc/udev/rules.d/70-dpf.rules

Code: Alles auswählen

BUS=="usb", ACTION=="add",SYSFS{idProduct}=="0102", SYSFS{idVendor}=="1908", RUN+="/bin/sh /home/benutzer/lcd4linux-switcher.sh"
SUBSYSTEM=="usb", ACTION=="remove", ENV{ID_MODEL_ID}=="0102", ENV{ID_VENDOR_ID}=="1908", RUN+="sh -c '/usr/bin/kill $(ps -ef | grep '[l]cd4linux' | awk '{print $2}')'"
habe schon weiteres logging des udev daemon aktiviert und sehe unter /var/log/messages
was von unexpected ")")' bin gerade auf arbeit deswegen kann ich nachher erst die genaue fehlermeldung nachreichen...

danke für eure mühe und zeit
ren22

uname
Beiträge: 12406
Registriert: 03.06.2008 09:33:02

Re: udev shell befehl wird nicht ausgeführt

Beitrag von uname » 20.03.2013 14:32:22

Ich bin mir nicht sicher. Aber die geschachtelten einfachen Anführungszeichen ( ' ) scheinen nicht wirklich gut zu sein. Vielleicht musst du die escapen.

ren22

Re: udev shell befehl wird nicht ausgeführt

Beitrag von ren22 » 20.03.2013 16:09:51

mit escapen meinst du backslash-hochkomma anstatt hochkomma ?!!? escaped nicht escaped
habe ich auch probiert klappt leider nicht

uname
Beiträge: 12406
Registriert: 03.06.2008 09:33:02

Re: udev shell befehl wird nicht ausgeführt

Beitrag von uname » 20.03.2013 16:19:47

Natürlich nur so (Auszug):

Code: Alles auswählen

RUN+="sh -c '/usr/bin/kill $(ps -ef | grep \'[l]cd4linux\' | awk \'{print $2}\')'"
Den Code habe ich nicht versucht zu verstehen wodurch es falsch sein kann.

Cae
Beiträge: 6349
Registriert: 17.07.2011 23:36:39
Wohnort: 2130706433

Re: udev shell befehl wird nicht ausgeführt

Beitrag von Cae » 20.03.2013 16:37:28

Die Ticks ' lassen sich nur aufwaendig ueber '\'' escapen: Tick (beendet den ersten String), Backslash, Tick (ergibt einen literalen Tick), Tick (beginnt den Rest vom String). Daher wuerde ich escapte Anfuehrungszeichen \" nehmen:

Code: Alles auswählen

RUN+="/bin/sh -c \"/usr/bin/kill $(ps -ef | /bin/grep '[l]cd4linux' | /usr/bin/awk '{print $2}')\""
An der Stelle ist das okay. sh sollte [tm] eigentlich immer gehen, aber /bin/sh funktioniert auch bei kaputtem $PATH. Analog fuer die anderen Programme.

awk ist an dieser Stelle uebertrieben, cut tut's genauso. Vermutlich willst du aber nicht ps-Output greppen, sondern pidof verwenden. (Aber das hat nu' nix mit dem eigentlichen Fehler zu tun.)

Gruss Cae
If universal surveillance were the answer, lots of us would have moved to the former East Germany. If surveillance cameras were the answer, camera-happy London, with something like 500,000 of them at a cost of $700 million, would be the safest city on the planet.

—Bruce Schneier

ren22

Re: udev shell befehl wird nicht ausgeführt

Beitrag von ren22 » 20.03.2013 19:58:46

danke erstmal euch allen ;)

*sorry da ist ein *TYPO sollte lauten:
/bin/kill
nicht /usr/bin/killl
*sorry
awk ist an dieser Stelle uebertrieben, cut tut's genauso. Vermutlich willst du aber nicht ps-Output greppen, sondern pidof verwenden. (Aber das hat nu' nix mit dem eigentlichen Fehler zu tun.)
was ich eigentlich möchte das alle Prozesse die den Begriff "lcd4linux" enthalten ge-killt werden wenn die udev regel ausgeführt wird ( also wenn ich mein usb lcd device entferne)

also der code von Cae sieht schonmal viel besser aus was die Fehlermeldungen betrifft ;)
aber leider werden die Prozesse die den Begriff "lcd4linux" enthalten leider nicht gekillt ....

...jetzt wirft /var/log/daemon.log nur noch folgende Fehlermeldung aus:
Mar 20 19:48:44 debi udevd-work[30848]: RUN '/bin/sh /home/benutzer/lcd4linux-switcher.sh' /etc/udev/rules.d/70-dpf.rules:1
Mar 20 19:48:44 debi udevd-work[30848]: MODE 0664 /lib/udev/rules.d/91-permissions.rules:36
Mar 20 19:48:44 debi udevd-work[30848]: created db file for '/devices/pci0000:00/0000:00:1d.2/usb4/4-1' in '/dev/.udev/db/usb:4-1'
Mar 20 19:48:44 debi udevd-work[30848]: creating device node '/dev/bus/usb/004/008', devnum=189:391, mode=0664, uid=0, gid=0
Mar 20 19:48:44 debi udevd-work[30848]: preserve file '/dev/bus/usb/004/008', because it has correct dev_t
Mar 20 19:48:44 debi udevd-work[30848]: set permissions /dev/bus/usb/004/008, 020664, uid=0, gid=0
Mar 20 19:48:44 debi udevd-work[30848]: creating symlink '/dev/char/189:391' to '../bus/usb/004/008'
Mar 20 19:48:44 debi udevd-work[30848]: '/bin/sh /home/benutzer/lcd4linux-switcher.sh' started
Mar 20 19:48:44 debi udevd-work[30848]: '/bin/sh' (stderr) 'lcd4linux: no process found'
was mich wundert, ist:
Mar 20 19:48:44 debi udevd-work[30848]: MODE 0664 /lib/udev/rules.d/91-permissions.rules:36
und
Mar 20 19:48:44 debi udevd-work[30848]: '/bin/sh' (stderr) 'lcd4linux: no process found'
[/quote]
lcd4linux bzw. der/die Prozesse laufen, bevor die udev Regel, also wenn udev ausgeführt wird, die eigenlichen Prozesse killen sollte

hat wer noch eine Idee woran es jetzt hapert ? ;)
danke *confused* :)
ren22

Antworten