저는 OpenSuse Leap에서 Udev 규칙을 사용하고 있으며 USB 장치가 시스템에 연결되어 있을 때 간단한 작은 스크립트를 실행하려고 합니다.
그런데 "RUN+=" 키워드에 추가한 스크립트가 실행되지 않습니다.
단계는 다음과 같습니다.
1) 나는 규칙을 썼다"10_MY_RULES.규칙"제공된 정보를 바탕으로우드바뎀 정보.
KERNEL=="sdf1", SUBSYSTEM=="block", SUBSYSTEMS=="usb", ATTRS{product}=="Flash Drive", ATTRS{manufacturer}=="Samsung",ATTRS{idProduct}=="1000", ATTRS{idVendor}=="090C", RUN="/home/user/bin/script.sh"
내 스크립트"스크립트 파일"다음과 같이:
#!/bin/bash; mkdir /home/user/Desktop/CREATE_FOLDER_TEST
2) OpenSuse Leap은 udev 규칙을 여러 위치에 배포합니다.
위치는 다음과 같습니다.
- /etc/udev/rules.d
- /usr/lib/udev/rules.d
- /run/udev/rules.d
나는 "에 내 규칙을 씁니다./run/udev/rules.d"USB 장치를 연결할 때를 고려하면우데브액세스 파일은 다음 위치에 생성됩니다./달리기.
3) 다음 명령을 실행합니다.
- udevadm 제어--규칙 다시 로드
- udevadm 트리거
4) 완료되면 "udevadm 모니터” 주변 장치(이 경우에는 USB)가 연결되었을 때 내 시스템이 무엇을 하는지 확인합니다.
5) 내 플래시 드라이브가 시스템에 추가되었을 때 아무 작업도 수행되지 않고 내 스크립트가 실행되지 않는 것을 발견했습니다. 그래서 다음 명령을 실행하여 특정 장치에서 규칙을 트리거합니다.
- udevadm test --action=/path/to/device 추가
그림의 마지막 줄에서 볼 수 있듯이 내 규칙을 읽고 있는 것을 보았습니다...
운이 좋지 않아서 규칙을 변경하고 변경했습니다. 더 추가해요커널, 하위 시스템, 속성 등
위의 모든 항목은 두 모드 모두에서 실행됩니다.뿌리그리고사용자.
답변1
수동으로 시도해 보셨나요 script.sh
?
나는 시도하고 얻었다
bash: ./script.sh: /bin/bash;: bad interpreter: No such file or directory
#!
스크립트 줄에서는 명령 구분 기호로 세미콜론을 사용할 수 없습니다. 이 줄은 스크립트 인터프리터와 가능한 옵션을 지정하는 데에만 사용됩니다.
실제로, script.sh
udev 규칙을 시행하지 않았기 때문에 규칙이 실패한 것 같습니다. @eblock이 언급했듯이 필요한 최소한의 검사 수를 사용해야 합니다. 규칙이 작동하지 않으면 검사를 더 추가하는 대신 일부 검사를 제거해야 합니다.
또한 /run
tmpfs 파일 시스템(= 기본적으로 RAM 디스크)에 있으므로 지속성이 없다는 점에 유의하세요. 여기에 넣은 모든 내용은 다음 재부팅 후에는 사라집니다. 따라서 /run/udev/rules.d
다른 규칙이나 다른 자동화에 의해 생성된 자동 생성 규칙에만 사용해야 합니다.
/usr/lib/udev/rules.d
배포에 대한 표준 규칙입니다. 시스템 관리자는 /etc/udev/rules.d
필요에 따라 표준 규칙을 보완하거나 재정의해야 합니다.