4

我创建了一个 udev 规则来在插入 USB 设备后执行 bash 脚本

SUBSYSTEMS=="usb", ATTRS{serial}=="00000000", SYMLINK+="Kingston", RUN+="/bin/flashled.sh"

但是脚本运行了几次而不是一次,我认为这取决于检测到硬件的方式?我尝试将 sleep 10 放入脚本和 fi 中,但这没有任何区别。

4

1 回答 1

0

这不是一个解决方案,而是一种解决方法:
一种方法(简单)是像这样开始你的脚本“/bin/flashled.sh”

#!/bin/bash
#this file is /bin/flashled.sh

#let's exit if another instance is already running
if [[ $(pgrep -c "$0" ) -gt 1 ]]; then exit ;fi

... ... ...

但是,在某些边界情况下,这可能有点容易出现竞争条件(bash 有点慢,因此无法确保这将始终有效),但它可能在您的情况下完美运行。

另一个(更可靠但更多代码)是像这样开始“/bin/flashled.sh”:

#!/bin/bash
#this file is /bin/flashled.sh
#write in your /etc/rc.local: /bin/flashled.sh & ; disown
#or let it start by init.    

while :
do
    kill -SIGSTOP $$ # halt and wait
    ... ...          # your commands here
    sleep $TIME      # choose your own value here instead of $TIME
done

在引导期间启动它(例如,通过 /etc/rc.local),因此它将等待信号继续......它得到多少“继续”信号并不重要(它们没有排队),只要它们在 $TIME 内

相应地更改您的 udev 规则:

SUBSYSTEMS=="usb", ATTRS{serial}=="00000000", SYMLINK+="Kingston", RUN+="/usr/bin/pkill -SIGCONT flashled.sh"
于 2013-11-14T18:31:31.510 回答