12 Jun
2021
12 Jun
'21
3:43 p.m.
If the command shares any resources, and name “autobackup” suggests it does, it should include some mechanism that prevents concurrent execution if another instance is already running. Otherwise, even if a single match happens, multiple instances of the script may be executed. For USB devices that may be a tiny power interruption during insertion, causing it to be detected, removed, detected again: insertion - - - removal - - - insertion - - - - - - - |-- script ---------------------------------------> \_ two instances |-- script ---------> / of the code It should be either of those: |-- script -------------------------------------------------> |--- BAIL OUT! -| or |-- script --------------------------------- end| |-- WAIT .......... script ---> > SUBSYSTEM=="block", ACTION=="add", ATTRS{idVendor}=="058f", > ATTRS{idProduct}=="6387", SYMLINK+="external%n", > RUN+="/usr/local/bin/autobackup.sh" > > This works well, buth exec 2 times the script... > > Jun 12 13:53:09 archlaptop autobackup.sh: BEGIN SCRIPT > Jun 12 13:53:13 archlaptop autobackup.sh: BEGIN SCRIPT Because there are two matches for that pattern: - //devices/platform/…/target0:0:0/0:0:0:0/block/sda - //devices/platform/…/target0:0:0/0:0:0:0/block/sda/sda1 Both of them have SUBSYSTEM=="block", ACTION=="add", ATTRS{idVendor}=="058f" and ATTRS{idProduct}=="6387". > If add ENV{DEVTYPE}=="usb_device" and change the > SUBSYSTEM=="usb_device" , when plug usb, udev does nothing ... Because there is nothing that matches SUBSYSTEM=="usb_device".