疑!小編前一篇文章不是才寫一篇 『 SHELL SCRIPT CHECK USB DEVICE 透過SHELL SCRIPT判斷USB設備,執行特定程式 』,為什麼要再寫一篇一樣的東西;事實上是因為功能需求是一樣,只是觸發的機制不一樣 上一篇是排程觸發,這一篇寫的是事件觸發。
新增一個客制化的udev規則
指令:cd /etc/udev/rules.d/
touch test.rules
新增以下內容
ACTION==”add”, SUBSYSTEM==”usb”, ATTRS{idVendor}==”0303″, ATTRS{idProduct}==”1001″, RUN+=”/usr/bin/at -M -f/check.sh now”
說明:
ACTION==”add” <=新建立的 (usb插入時觸發)
SUBSYSTEM==”usb” <=只偵測 usb
ATTRS{idVendor}==”0303″ <=廠商編號
ATTRS{idProduct}==”1001″ <=產品編號
RUN+=”/usr/bin/at -M -f/check.sh now” <=要執行的程式
特別說明:udev 中的 RUN 只能跑短行程的指令(卡在這邊卡超久),雖然可透過sleep來延長執行時間;但如果你的程式是需要長時間在背景跑的話就需要使用 at
安裝 at
指令:apt install at
安裝完後以上程式就可以正常的在背景執行。
參考資料:
https://wiki.debian.org/udev
http://reactivated.net/writing_udev_rules.html
https://unix.stackexchange.com/questions/108082/how-can-i-trigger-an-event-in-shell-script-when-an-usb-device-is-removed
https://wiki.archlinux.org/index.php/Udev_(%E7%AE%80%E4%BD%93%E4%B8%AD%E6%96%87)
http://puremonkey2010.blogspot.com/2010/11/linux-at.html