udev 규칙은 하드 드라이브가 핫 플러그되면 쉘 스크립트를 실행합니다.

udev 규칙은 하드 드라이브가 핫 플러그되면 쉘 스크립트를 실행합니다.

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.dudev 규칙을 참조하려면
  • udevadmudev와 상호작용하는 데 사용되는 EG는 문제 해결 시 udev 이벤트를 트리거합니다.
  • sudo systemctl edit systemd-udevdudevd systemctl 장치 조정
  • udevadm test-builtin --help내장 udev 모듈 나열

긴 이야기 짧게

스크립트가 실행될 가능성이 높지만 제한된 커널 네임스페이스에서 실행되고 있습니다.

관련 정보