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 모듈 나열
긴 이야기 짧게
스크립트가 실행될 가능성이 높지만 제한된 커널 네임스페이스에서 실행되고 있습니다.