我创建了一个 udev 规则来在插入 USB 设备后执行 bash 脚本
SUBSYSTEMS=="usb", ATTRS{serial}=="00000000", SYMLINK+="Kingston", RUN+="/bin/flashled.sh"
但是脚本运行了几次而不是一次,我认为这取决于检测到硬件的方式?我尝试将 sleep 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"