编辑:

编辑:

我一直在尝试使用udevDebian 系统在连接无线卡时运行 bash 脚本。

到目前为止我创建了这个文件/etc/udev/rules.d/wifi-detect.rules

ACTION=="add", ATTRS{idVendor}=="0cf3", ATTRS{idProduct}=="9271", RUN+="/root/test.sh"

现在,我正在尝试使test.sh这些内容发挥作用:

#!/bin/bash
/bin/echo "test!" > /test.txt

但由于某种原因,当我连接无线卡时似乎没有任何反应,没有test.txt创建文件。

我的lsusb卡上:

Bus 001 Device 015: ID 0cf3:9271 Atheros Communications, Inc. AR9271 802.11n

当我连接卡时运行udevadm monitor –env以下内容:

KERNEL[1017.642278] add      /devices/platform/bcm2708_usb/usb1/1-1/1-1.3 (usb)
KERNEL[1017.644676] add      /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3:1.0 (usb)
KERNEL[1017.645035] add      /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/firmware/1-1.3 (firmware)
KERNEL[1017.708056] remove   /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/firmware/1-1.3 (firmware)
UDEV  [1017.714772] add      /devices/platform/bcm2708_usb/usb1/1-1/1-1.3 (usb)
UDEV  [1017.733002] remove   /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/firmware/1-1.3 (firmware)
UDEV  [1017.772669] add      /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/firmware/1-1.3 (firmware)
UDEV  [1017.798707] add      /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3:1.0 (usb)
KERNEL[1018.456804] add      /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3:1.0/ieee80211/phy8 (ieee80211)
KERNEL[1018.465994] add      /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3:1.0/net/wlan0 (net)
KERNEL[1018.479878] add      /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3:1.0/leds/ath9k_htc-phy8 (leds)
KERNEL[1018.483074] add      /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/usb_device/usbdev1.20 (usb_device)
UDEV  [1018.600456] add      /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3:1.0/leds/ath9k_htc-phy8 (leds)
UDEV  [1018.604376] add      /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3:1.0/ieee80211/phy8 (ieee80211)
UDEV  [1018.626243] add      /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/usb_device/usbdev1.20 (usb_device)
KERNEL[1018.659318] move     /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3:1.0/net/wlan1 (net)
UDEV  [1018.758843] add      /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3:1.0/net/wlan1 (net)
UDEV  [1018.932207] move     /devices/platform/bcm2708_usb/usb1/1-1/1-1.3/1-1.3:1.0/net/wlan1 (net)

我已经尝试了很多例子,但我无法让它发挥作用。我希望有人能帮我解决这个问题;)谢谢!


编辑:

为了简化事情,我将规则更改为:

ACTION=="add", ATTRS{idVendor}=="0cf3", ATTRS{idProduct}=="9271", RUN+="/bin/echo 'test' > /test.txt"

我设法udevadm control --log-priority=info按照@user1146332的建议进行设置,并得到了这个有趣的日志:

Sep  9 16:27:53 iklive-rpi1 udevd[1537]: RUN '/bin/echo 'test' > /test.txt' /etc/udev/rules.d/wifi-detect.rules:1
Sep  9 16:27:53 iklive-rpi1 udevd[1544]: starting 'firmware.agent'
Sep  9 16:27:53 iklive-rpi1 udevd[126]: seq 663 queued, 'remove' 'firmware'
Sep  9 16:27:53 iklive-rpi1 udevd[126]: seq 663 forked new worker [1547]
Sep  9 16:27:53 iklive-rpi1 udevd[1537]: 'firmware.agent' [1544] exit with return code 0
Sep  9 16:27:53 iklive-rpi1 udevd[1548]: starting '/bin/echo 'test' > /test.txt'
Sep  9 16:27:53 iklive-rpi1 udevd[1547]: seq 663 running
Sep  9 16:27:53 iklive-rpi1 udevd[1547]: no db file to read /run/udev/data/+firmware:1-1.3.4: No such file or directory
Sep  9 16:27:53 iklive-rpi1 udevd[1547]: passed -1 bytes to netlink monitor 0x1af5ee0
Sep  9 16:27:53 iklive-rpi1 udevd[126]: seq 663 done with 0
Sep  9 16:27:53 iklive-rpi1 udevd[1547]: seq 663 processed with 0
Sep  9 16:27:53 iklive-rpi1 udevd[1537]: '/bin/echo 'test' > /test.txt'(out) 'test > /test.txt'
Sep  9 16:27:53 iklive-rpi1 udevd[1537]: '/bin/echo 'test' > /test.txt' [1548] exit with return code 0

那么...return code 0退出代码不是成功完成吗?如果是这样,为什么我在系统上没有得到任何文件?


编辑2:

我设法使用@htor 的提示来完成这项工作。我目前的规则:

ACTION=="add", ATTRS{idVendor}=="0cf3", ATTRS{idProduct}=="9271", RUN+="/bin/sh -c '/bin/echo test >> /test.txt'"

但由于某种原因该命令执行了 8 次,有没有办法避免这种情况?我认为这种情况正在发生,因为当加载无线卡驱动程序时,它们实际上需要卸载和安装该卡。尖端?

答案1

我曾有一个类似的问题不久前,解决方案是将RUN+=部分更改为RUN+="sh -c '/root/test.sh'".现在,我不知道在这种情况下您是否需要它,因为规则是调用脚本,而不是命令。

!另一个观察结果:尝试从字符串中删除"test!"或用单引号替换双引号。爆炸!可能会造成麻烦,因为它在 shell 中具有特殊含义,而双引号保留了该含义。

答案2

我的建议是将udevfromerr的日志记录优先级设置info

 udevadm control --log-priority=info

如果您想查看更多信息,请将其设置为debug。现在你可以找到非常详细udev的信息/var/log/daemon.log(至少在 debian 相关系统上)。一般来说,这对追查错误有很大帮助。

这只是对 htor 答案的补充,可能会解决您的问题。

相关内容