udev 규칙이 실행되었는지 확인하는 방법?


16

Ubuntu 13.10에서 udev에 익숙해 지려고합니다.

다음은 첫 번째 간단한 95.usbbackup.rules 규칙입니다.

ACTION=="add", SUBSYSTEMS="usb", RUN+="/usr/local/bin/my_backup.sh"

다음은 스크립트 (chmodded + x) my_backup.sh입니다.

#!/bin/bash
touch /tmp/test

외장 드라이브를 꽂아도 아무런 반응이 없습니다. 규칙이 실행 된 경우 어떻게 확인할 수 있습니까 (로그, 명령 등)?

고마워


2
나는 당신이 의미하는 것 같아요 SUBSYSTEMS=="usb". 즉 , 키에 값을 할당하는 ==단일 =이 아닌 동등성을 테스트하는 double 입니다 .
Lqueryvg

답변:


5

나는 이것이 작동해야한다고 확신한다. 규칙을 편집 한 후 udev 규칙을 다시로드하셨습니까?

udevadm control --reload-rules && udevadm trigger 루트로.


나는 더 좁은 규칙을 만들었습니다 : KERNEL == "sdb", 작동합니다. udev는 일부 하드웨어를 고유하게 식별하는 규칙 만 처리합니까?
pouzzler

아니오, 시도하십시오. KERNEL!="sdz*"모든 것을 얻어야합니다 (sdz [1-9] 제외)
Redsandro

5
이것은 실제로 질문에 대답하지 않습니다. 규칙이 트리거되었는지 어떻게 알 수 있습니까?
DanielSank

1
스크립트가 실행 되었기 때문에 알고 있습니다. 로그 파일에 쓸 수 있습니다. 또한udevadm monitor
Redsandro

2

다음과 같이 명령을 루트로 제공 할 수 있습니다.

udevadm 모니터

규칙이 시작되면 표시됩니다.


11
udevadm monitorudev 이벤트 만 표시하지만 해당 규칙이 실행 된 경우에는 표시되지 않습니다. 그러나 규칙을 트리거해야하는 이벤트를 찾을 수 있지만 규칙이 작동하는지 알 수 없습니다.
F.Raab

2

커널 3.0.35를 실행하고 있지만 다음과 같이 작동합니다.

장치의 경로를 얻으려면 다음과 같이 할 수 있습니다.

udevadm info --name /dev/sda1 --query all

필요한 것보다 많은 정보를 얻을 수 있지만 DEVPATH에 관심이 있습니다. 그런 다음 어떤 udev 규칙이 실행되는지 확인하려면 다음을 실행하십시오.

udevadm test DEVPATH

나는 이것이 실제로 규칙을 실행한다고 생각하지 않는다. 문서는 이것이 주어진 장치의 이벤트를 '시뮬레이션'한다고 말한다. 자세한 내용을 보려면 다음 매뉴얼 페이지를 확인하십시오. https://www.freedesktop.org/software/systemd/man/udevadm.html


1

루트와 같이 udev / systemd 버전 241 및 이와 유사한 경우 :

udevadm control --log-priority=debug
journalctl -f

또는 루트로 다시 영구적으로 만들려면 다음을 수행하십시오.

vi /etc/udev/udevd.conf
systemctl restart systemd-udevd
journalctl -f

추신 : 가장 빈번하지만 IMHO 오답 은 다음과 같습니다.

udevadm -d test / devices / where / is / my / device | & less

...하지만 이것은 많은 문제가 있습니다. 주요한 것들 :

  • where/is/my/device? 지루하고 복잡하며 오류가 발생하기 쉽습니다.

  • 최근 udev 버전 241 출력에 대한 이전 답변을 비교하면 예전 udevadm test보다 적은 정보가 표시되는 것 같습니다.

  • udevadm -d test 단지 시뮬레이션입니다 ! 경고 할 때마다 :

    이 프로그램은 디버깅 전용이며 RUN 키로 지정된 프로그램은 실행하지 않습니다. 일부 값이 다르거 나 시뮬레이션 실행에서 사용할 수 없기 때문에 잘못된 결과가 표시 될 수 있습니다.

udevadm test 새 규칙을 개발하기위한 것이며, 규칙이 깨지거나 누락되었거나 무시 된 문제를 해결하기위한 것이 아닙니다.


0

Raspberry Pi 3 B +와 동일한 문제가 발생했습니다. USB 저장 장치를 삽입 할 때 스크립트를 호출하려고했습니다. 규칙은 syslog에 기록되지 않으므로 어떤 규칙이 작동했는지 또는 어떤 규칙이 실패했는지 이해하기가 매우 어려워집니다.

그래서 나는 다음을 수행했다.

  1. 나는 /etc/udev/rules.d/100-myrule.rules에 규칙 파일을 만들었습니다.
  2. 그런 다음 명령을 실행했습니다. sudo /etc/init.d/udev restart

내가 확인했을 때 효과가있었습니다.

유용하거나 유용하지 않을 수있는 정보는 2 단계의 명령이 실행될 때까지 파일 시스템이 udev에 대해 읽기 전용이라는 것입니다.


0

udevadm test $(udevadm info --query=path --name=device_name)관련 규칙을 인용하여 장치 플러그인에서 어떤 명령 실행 될지 알려줍니다 udev. 예를 들어 :

# udevadm test /block/sdd
...
udev_rules_apply_to_event: PROGRAM '/sbin/multipath -c /dev/sdd' /lib/udev/rules.d/40-multipath.rules:11
...
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.