[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