如何检查udev规则是否被触发?


16

我正在尝试在Ubuntu 13.10下熟悉udev。

这是我的第一个简单的95.usbbackup.rules规则:

ACTION=="add", SUBSYSTEMS="usb", RUN+="/usr/local/bin/my_backup.sh"

这是脚本(已被+ x修改)my_backup.sh:

#!/bin/bash
touch /tmp/test

当我插入外部驱动器时,什么都没有发生。如果规则被触发,如何检查(日志,命令等)?

非常感谢


2
我想你的意思是SUBSYSTEMS=="usb"。即双精度==测试是否相等,而不是单=精度给键分配值。
Lqueryvg

Answers:


5

我很确定这应该可行。您在编辑规则后是否重新加载了udev规则?

udevadm control --reload-rules && udevadm trigger 作为根。


我制定了一个较窄的规则:KERNEL ==“ sdb”,它可以工作。udev是否仅处理唯一标识某些硬件的规则?
pouzzler 2013年

不,尝试KERNEL!="sdz*",您应该获得所有内容(
sdz

5
这并不能真正回答问题。您怎么知道规则是否触发?
DanielSank

1
您知道,因为脚本已运行。您可以使其写入日志文件。另外udevadm monitor
Redsandro

2

您可以像这样以root用户身份发出命令:

udevadm监视器

它将在规则触发时显示。


11
udevadm monitor只会显示udev事件,但不会触发相应的规则。但是,您可以查找应该触发规则的事件,但是随后您不知道规则是否有效。
F.Raab

2

我正在运行内核3.0.35,但是以下对我有用。

要获取设备的路径,您可以执行以下操作:

udevadm info --name /dev/sda1 --query all

您将获得比您所需更多的信息,但您对DEVPATH感兴趣。然后查看执行了哪些udev规则,请运行以下命令:

udevadm test DEVPATH

我认为这实际上并没有执行规则,文档说这可以“模拟”给定设备的事件。要获取更多信息,请查看此手册页:https : //www.freedesktop.org/software/systemd/man/udevadm.html


1

以udev / systemd 241和类似版本(以root用户身份):

udevadm control --log-priority=debug
journalctl -f

或者将其永久化,再次作为根:

vi /etc/udev/udevd.conf
systemctl restart systemd-udevd
journalctl -f

PS:最常见但恕我直言的错误答案如下:

udevadm -d test / devices / where / is / my / device |&less

……但这有很多问题。主要的:

  • where/is/my/device?乏味,复杂且容易出错。

  • 将最新的udev版本241输出的旧答案进行比较,udevadm test似乎显示的信息较少。

  • udevadm -d test 只是一个模拟!每次警告:

    该程序仅用于调试,它不会运行RUN键指定的任何程序。它可能显示错误的结果,因为某些值可能不同,或者在模拟运行中不可用。

udevadm test 用于制定新规则,而不是对已损坏,丢失或覆盖的规则进行故障排除。


0

我在Raspberry Pi 3 B +上遇到了同样的问题。我试图在插入USB存储设备时调用脚本。规则不会记录在syslog中,因此很难理解哪个规则有效或哪个规则失败。

所以我做了以下事情:

  1. 我在/etc/udev/rules.d/100-myrule.rules中创建了规则文件
  2. 然后我运行命令 sudo /etc/init.d/udev restart

当我检查时,它起作用了。

一条可能有用或可能无用的信息是,文件系统对于udev只读,直到执行了步骤2中的命令。


0

udevadm test $(udevadm info --query=path --name=device_name)应该根据所涉及的规则告诉您哪些命令在设备插件上执行udev。例如:

# udevadm test /block/sdd
...
udev_rules_apply_to_event: PROGRAM '/sbin/multipath -c /dev/sdd' /lib/udev/rules.d/40-multipath.rules:11
...
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.