sh
每次将硬盘驱动器热插拔到我的计算机时,我都想运行自定义脚本,无论驱动器的品牌、型号或其他规格如何。
我的 udev 规则如下/etc/udev/rules.d/10-TEST-RULE.rules
:
ACTION=="add", KERNEL=="sd*", RUN+="/usr/loca/bin/DRIVE_INSERT_MESSAGE.sh"
我重新加载了udev
规则几次,并在大多数更改后重新启动了我的设备。出什么问题了?
答案1
问题的性质
您遇到的问题是,udevd
默认情况下,Ubuntu 中不会在根 Linux 内核命名空间中运行。
# ps -axe -o user,pid,ipcns,mntns,netns,pidns,userns,utsns,comm | awk '$3!="-"' | grep -E "udevd|$$|MNTNS"
USER PID IPCNS MNTNS NETNS PIDNS USERNS UTSNS COMMAND
root 477 4026531839 4026532239 4026531840 4026531836 4026531837 4026532259 systemd-udevd
root 1663933 4026531839 4026531841 4026531840 4026531836 4026531837 4026531838 bash
任何安装udevd
对于计算机上运行的其余进程都是不可见的。您的DRIVE_INSERT_MESSAGE.sh
脚本在无法与系统的许多其他部分通信的命名空间中运行。
要进一步调试您的问题,请运行sudo nsenter --all -t $(pgrep systemd-udevd) /bin/bash
它将带您进入一个与udevd
.然后您可以探索并调整您的DRIVE_INSERT_MESSAGE.sh
脚本。
也可以看看
/usr/lib/udev/rules.d
供参考 udev 规则udevadm
用于与 udev 交互,EG 在故障排除时触发 udev 事件sudo systemctl edit systemd-udevd
调整 udevd systemctl 单元udevadm test-builtin --help
列出内置 udev 模块
长话短说
您的脚本很可能正在运行,但它在受限的内核命名空间中运行。