답변:
파일에 /etc/udev/rules.d
다음 과 같은 줄을 넣으십시오 .
KERNEL=="sd*", ATTRS{vendor}=="Yoyodyne", ATTRS{model}=="XYZ42", ATTRS{serial}=="123465789", RUN+="/pathto/script"
NAME="subdir/mydisk%n"
아래에 사용자 정의 입력 경로를 사용하려는 경우 와 같은 절을 추가하십시오 /dev
.
실행할 udevadm info -a -n sdb
수있는 속성을 확인하려면 실행 하십시오 ( attribute=="value"
; 플러그 할 때 sdb
작성된 새 항목에 따라 디스크에 자동으로 할당 된 장치 이름으로 대체 /dev
). 하나의 스탠자 ATTRS
에서 절을 사용할 수 있습니다 . 모든 스탠자를 선택할 수 있지만 절은 모두 동일한 스탠자에서 가져와야하므로 혼합하여 일치시킬 수 없습니다. 다른 스탠자에 나열된 다른 유형의 절과 절을 혼합 할 수 있습니다 .ATTRS
ATTRS
udevadm trigger
? 시스템이 udev를 사용합니까? 무언가가 연결되어있을 때 스크립트를 실행하려면 모든 조건 (with 절 ==
)을 제거하십시오 (구문에는 하나의 조건이 필요할 수도 있지만 확실하지 않습니다 KERNEL=="*"
.
at
. "외부 프로그램을 실행"을 참조하십시오 reactivated.net/writing_udev_rules.html
/lib/udev/rules.d
디스크 관련 규칙의 예를 살펴 보았습니다 . Ubuntu 시스템에서 하나의 규칙 파일은 ID_FS_UUID_ENC
자체 규칙 파일에서 사용할 수 있는 환경 변수 를 제공 합니다.
따라서 사용자 지정 규칙 파일을에 배치했습니다 /etc/udev/rules.d/foodevice.rules
. 숫자가 앞에 붙지 않기 때문에 마침내 udev에 의해 실행됩니다. Btw에서 udev 데몬은 /etc/udev/rules.d
파일 변경시 다시 시작할 필요가없는 변경 사항을 감시 했습니다.
내용 /etc/udev/rules.d/foodevice.rules
은 :
ACTION=="add", KERNEL=="sd*[!0-9]", ENV{ID_FS_UUID_ENC}=="FFFF-AAAF",
RUN+="/usr/bin/sudo -u juser /home/juser/path/script.sh"
(이것은 하나의 규칙입니다-udev에는 줄 연속 메커니즘이 없기 때문에 ENV 절 뒤에 줄 바꿈을 제거해야합니다)
udev로 시작한 프로그램은 데몬을 차단하므로 오랫동안 실행하지 않아야합니다. 나는 그것을 통해 at
, 즉 실제 작업을 수행하는 프로세스에서 분리 하여 해결했습니다 .
$ cat /home/juser/path/script.sh
#!/bin/sh
echo ~/path/mountcopystuff.sh | at now
udevadm control --reload-rules
배포판에 따라를 사용하여 udev 규칙을 다시로드해야 할 수도 있습니다 .
at now
나는 제안한다 batch
.
~/path/mountcopystuff.sh &
- at
등은 무언가 잘못되었을 때 이메일 알림을받을 수 있다는 이점이 있습니다. 그러나 임베디드 시스템에서는 아마도별로 관심이 없습니다.