I'm running RHEL6 and I'm trying to write a udev rule that is triggered upon plugging in and removing usb devices. I created a file called 80-usb.rules
in /etc/udev/rules.d/
and I gave it the following contents (so far nothing too specific, just want to test):
ACTION=="add", SUBSYSTEMS=="usb", RUN+="touch /tmp/test"
I saved the file and plugged in a USB drive to test. However, the file /tmp/test
was not created.
I figure my udev rule should match my USB drive, since I can run udevadm info
on the USB drive and at least one of the parent devices has the attribute SUBSYSTEMS=="usb"
.
Why might the udev rule not get triggered?
I tried to run udevadm test --action=add /path/to/device
and it is clear that the .rules
file that I wrote is being processed and that my rules are being matched. Here are a few relevant lines from the output:
parse_file: reading '/etc/udev/rules.d/80-usb.rules' as rules file
udev_rules_apply_to_event: RUN '/bin/touch /tmp/test' /etc/udev/rules.d/80-usb.rules:1
udevadm_test: run: '/bin/touch /tmp/test'
But still, /tmp/test
does not exist. I am so confused. Clearly this rule is being matched and the rules are being applied. So why doesn't the command specified by RUN
execute?
Best Answer
Your rule must give an absolute path for executable:
Edit:
And if you want to execute a script, you must tell what shell will execute it: