[arch-general] udev rules 2 times exec script
Maykel Franco
maykeldebian at gmail.com
Sat Jun 12 16:43:49 UTC 2021
El sáb, 12 jun 2021 a las 17:43, mpan via arch-general
(<arch-general at lists.archlinux.org>) escribió:
>
> 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".
>
Hi, thanks for your response.
I understand, I add the size of partition sda1 for only match pattern
--> ATTR{size}=="3930112"
SUBSYSTEM=="block", ACTION=="add", ATTRS{idVendor}=="058f",
ATTRS{idProduct}=="6387", ATTR{size}=="3930112",
SYMLINK+="external%n", RUN+="/usr/local/bin/autobackup.sh"
And now, only exec the script one time. The name of device change when
connect different port usb...
I have to put a more precise and less ugly rule. Maybe with KERNEL
variable --> KERNEL=="sd*1" :
SUBSYSTEM=="block", ACTION=="add", ATTRS{idVendor}=="058f",
ATTRS{idProduct}=="6387", KERNEL=="sd*1", SYMLINK+="external%n",
RUN+="/usr/local/bin/autobackup.sh"
With these, works well!
Thanks.
More information about the arch-general
mailing list