启动时,如果使用udevadm触发器,为什么我的udev规则不运行?

分享于 

3分钟阅读

ubuntu

  繁體

问题

我遇到了udev规则不运行的问题,

我有一个规则/etc/udev/rules.d/99-test.rules,它包含:


ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x8086", RUN+="/sayhi"



sayhi只有一个:


#!/bin/bash


date +"%Y-%m-%d %H:%M:%S,%3N" >> /saidhi



这是一个Intel机器,我有很多0x8086 PCI设备:


root@imtrobot:~# lspci -n |grep 8086


00:00.0 0600: 8086:2770 (rev 02)


00:02.0 0300: 8086:2772 (rev 02)


00:1d.0 0c03: 8086:27c8 (rev 01)


[ etc. 12 lines total ]



如果在引导后,我运行udevadm trigger --action=add --subsystem-match=pci 然后/saidhi会得到正确的日期数。


答案1

规则与你的相似:


$ sudo cat /etc/udev/rules.d/10-usb_automount.rules 


KERNEL=="sd*", RUN+="/home/pi/bin/usb-automount"



现在脚本是一个递归调用


$ cat /home/pi/bin/usb-automount


#!/bin/sh



ROOT_RW=`mount | grep 'dev/root' | grep -E '(.*rw.*)'`



if [ -z"$ROOT_RW" ]; then


 sleep 3 


 /home/pi/bin/usb-automount & disown


else


 /home/pi/bin/usb-automount.sh


fi



注此脚本仍需要3秒才能执行,因此通过更改为:


if [ -z"$ROOT_RW" ]; then


 ( sleep 3; /home/pi/bin/usb-automount ) & disown


else


 /home/pi/bin/usb-automount.sh


fi




答案2


ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x8086", RUN+="/usr/bin/at -M -f /sayhi now"




答案3


dmesg | grep -i -e mount -e pci



我创建了启动& disownsleep命令的脚本的新脚本,


$ ls -l /sa*


-rw-r--r-- 1 root root 1104 Oct 24 12:37 /saidhi


-rwxr-xr-x 1 root root 29 Oct 24 12:31 /sayhi


-rwxr-xr-x 1 root root 62 Oct 24 12:28 /sayhi2



$ cat /sayhi


#!/bin/bash


/sayhi2 & disown



$ cat /sayhi2 


#!/bin/bash


sleep 30


date +"%Y-%m-%d %H:%M:%S,%3N" >> /saidhi



$ cat /etc/udev/rules.d/99-test.rules 


ACTION=="add", SUBSYSTEM=="pci", ATTR{vendor}=="0x8086", RUN+="/sayhi"





BOO  引导  时间  RULE  规则  trigger  
相关文章