Udev 规则未运行

Udev 规则未运行

我正在 OpenSuse Leap 上使用 Udev 规则,并且在 USB 设备插入我的系统后尝试运行一个简单的小脚本。

但是,我在关键字“RUN+=”中添加的脚本无法运行。

以下是以下步骤:

1)我写了规则“10_MY_RULES.规则“根据提供的信息乌德瓦德姆信息

KERNEL=="sdf1", SUBSYSTEM=="block", SUBSYSTEMS=="usb", ATTRS{product}=="Flash Drive", ATTRS{manufacturer}=="Samsung",ATTRS{idProduct}=="1000", ATTRS{idVendor}=="090C", RUN="/home/user/bin/script.sh"

我的剧本“脚本文件”如下:

#!/bin/bash; mkdir /home/user/Desktop/CREATE_FOLDER_TEST

2) OpenSuse Leap 有几个地方分配 udev 规则。

这些是地点:

  • /etc/udev/rules.d
  • /usr/lib/udev/rules.d
  • /run/udev/rules.d

我把我的规则写在“/run/udev/rules.d“考虑到当我插入 USB 设备时乌德夫将在下创建一个访问文件/跑步

3)我运行以下命令:

  • udevadm 控制--重新加载规则
  • udevadm 触发器

4)完成后我也运行“udevadm 监视器” 来查看当外围设备插入后我的系统正在做什么,在本例中是我的 USB。

5) 当我的闪存驱动器被添加到系统中时,我注意到没有执行任何操作,我的脚本没有运行。所以我运行以下命令来触发特定设备上的规则

  • udevadm test --action=add /path/to/device

我注意到我的规则正在被阅读,正如您在图片的最后一行中看到的那样......

在此输入图像描述

运气不佳,我修改了规则并进行了修改。我添加更多内核、子系统、属性等

以上所有内容我都以两种模式运行用户

答案1

您是否尝试过手动执行script.sh

我尝试过,并得到了

bash: ./script.sh: /bin/bash;: bad interpreter: No such file or directory

#!您不能在脚本行上使用分号作为命令分隔符。该行仅用于指定脚本解释器及其可能的选项,仅此而已。

事实上,你的规则似乎失败了,因为你script.sh没有执行;你的 udev 规则可能没问题。正如 @eblock 评论的那样,您应该使用最少必要数量的检查:如果您的规则不起作用,您应该删除一些检查,而不是添加更多检查。

另请注意,它/run不是持久性的,因为它位于 tmpfs 文件系统(= 本质上是 RAM 磁盘)上。您放入其中的任何内容都会在下次重新启动后消失。因此,/run/udev/rules.d应仅用于由其他规则或其他自动化生成的自动生成的规则。

/usr/lib/udev/rules.d用于发行版的标准规则。系统管理员应该/etc/udev/rules.d根据需要补充或覆盖标准规则。

相关内容