USB 연결/분리를 위한 Udev 규칙이 트리거되지 않습니다.

USB 연결/분리를 위한 Udev 규칙이 트리거되지 않습니다.

저는 RHEL6을 실행 중이고 USB 장치를 삽입하고 제거할 때 트리거되는 udev 규칙을 작성하려고 합니다. 80-usb.rules호출된 파일 을 생성 /etc/udev/rules.d/하고 다음 내용을 제공했습니다(아직까지 구체적인 내용은 없으므로 테스트해 보고 싶었습니다).

ACTION=="add", SUBSYSTEMS=="usb", RUN+="touch /tmp/test"

테스트를 위해 파일을 저장하고 USB 드라이브를 연결했습니다. 그러나 파일이 /tmp/test생성되지 않습니다.

udevadm infoUSB 드라이브에서 실행할 수 있고 상위 장치 중 적어도 하나에 속성이 있으므로 udev 규칙이 USB 드라이브와 일치해야 한다고 생각합니다 SUBSYSTEMS=="usb".

udev 규칙이 트리거되지 않는 이유는 무엇입니까?

실행을 시도했는데 내가 작성한 파일이 처리되고 있고 내 규칙이 일치하는 것이 udevadm test --action=add /path/to/device분명했습니다 . .rules출력의 관련 줄은 다음과 같습니다.

parse_file: reading '/etc/udev/rules.d/80-usb.rules' as rules file
udev_rules_apply_to_event: RUN '/bin/touch /tmp/test' /etc/udev/rules.d/80-usb.rules:1
udevadm_test: run: '/bin/touch /tmp/test'

하지만 아직 /tmp/test거기에는 없습니다. 혼란스러워요. 분명히 이 규칙이 일치되고 규칙이 적용되고 있는 것입니다. 그렇다면 왜 RUN실행으로 지정된 명령이 실행되지 않습니까?

답변1

규칙은 실행 파일에 대한 절대 경로를 제공해야 합니다.

ACTION=="add", SUBSYSTEMS=="usb", RUN+="/usr/bin/touch /tmp/test"

편집하다:

스크립트를 실행하려면 어떤 쉘이 스크립트를 실행할지 알려주어야 합니다.

ACTION=="add", SUBSYSTEMS=="usb", RUN+="/bin/sh /path/to/your/script"

답변2

다음을 확인해야 합니다.

  • 명령의 경로는 RUN절대 경로여야 합니다.
  • 파일은 실행 가능해야 합니다.
  • 환경은 PATH명령의 실행 범위로 제한됩니다.

먼저 이 스크립트 파일을/lib/udev/touch.sh

vim /lib/udev/touch.sh

이 파일에 다음을 작성하십시오.

#!/bin/bash
touch /tmp/test

실행 가능하게 만드세요:

chmod +x /lib/udev/touch.sh

규칙 파일을 다음과 같이 변경합니다.

ACTION=="add", SUBSYSTEMS=="usb", RUN+="/lib/udev/touch.sh"

udev 규칙을 다시 로드하세요.

udevadm control --reload-rules

그러면 규칙이 다시 읽혀집니다 /lib/udev/rules.d/*. 지금까지는 변경 사항이 적용되지 않았습니다.

udev는 단순화된 환경 PATH에서 스크립트를 실행합니다 . 구성된 경로 내에 없는 바이너리는 전체 경로를 사용하여 액세스해야 합니다. PATH스크립트에서 환경을 확장할 수도 있습니다 .

set래퍼 스크립트의 출력을 로그 파일에 기록하여 정의된 경로를 확인합니다.

set >>/tmp/udev-env-test

다음과 같이 보일 수 있습니다:

PATH='/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin'

관련 정보