udev规则多次运行bash脚本

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

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

但脚本运行几次而不是一次,我认为这是硬件检测的方式? 我试图把睡眠10放入脚本和fi,但没有任何区别。

这不是一个解决方案,而是一个解决方法:
一种方法(简单的)是像这样开始你的脚本“/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"