USB 장치 플러그인에서 사용자 정의 스크립트를 실행하는 방법은 무엇입니까?

USB 장치 플러그인에서 사용자 정의 스크립트를 실행하는 방법은 무엇입니까?

Debian/CentOS/Fedora와 같은 현재 Linux 배포판에서 USB 장치 플러그인을 통해 사용자 정의 스크립트를 자동화하는 최첨단 방법은 무엇입니까?

예를 들어 UUID(또는 장치 ID 등)를 기반으로 USB 대용량 저장 장치를 자동으로 마운트/복사/마운트 해제하려는 경우입니다.

답변1

다음 파일에 이와 같은 줄을 넣으십시오 /etc/udev/rules.d.

KERNEL=="sd*", ATTRS{vendor}=="Yoyodyne", ATTRS{model}=="XYZ42", ATTRS{serial}=="123465789", RUN+="/pathto/script"

NAME="subdir/mydisk%n"예를 들어 아래에서 사용자 정의 항목 경로를 사용하려는 경우 절을 추가합니다 /dev.

udevadm info -a -n sdb일치할 수 있는 속성을 확인하려면 실행하세요 ( attribute=="value"; 디스크를 삽입할 때 생성된 새 항목 sdb에 해당하는 디스크에 자동으로 할당된 장치 이름으로 대체됨). 어떤 절이라도 /dev사용할 수 있습니다.ATTRS하나스탠자: 임의의 스탠자를 선택할 수 있지만, ATTRS절은 모두 동일한 스탠자에 속해야 하며 혼합하여 일치시킬 수 없습니다. ATTRS여러 섹션에 나열된 다른 유형의 조항과 조항을 혼합 할 수 있습니다 .

답변2

/lib/udev/rules.d디스크 관련 규칙의 예를 찾아보았습니다 . Ubuntu 시스템에서 규칙 파일은 ID_FS_UUID_ENC자체 규칙 파일에서 사용할 수 있는 환경 변수를 제공합니다.

그래서 사용자 정의 규칙 파일을 /etc/udev/rules.d/foodevice.rules. 그런데 udev 데몬은 /etc/udev/rules.d변경 사항을 감시하므로 파일이 변경될 때 다시 시작할 필요가 없습니다.

그 내용은 /etc/udev/rules.d/foodevice.rules다음과 같습니다:

ACTION=="add", KERNEL=="sd*[!0-9]", ENV{ID_FS_UUID_ENC}=="FFFF-AAAF",
  RUN+="/usr/bin/sudo -u juser /home/juser/path/script.sh"

(이것은 규칙입니다. udev에는 줄 연속 메커니즘이 없으므로 ENV 절 뒤의 개행 문자를 제거해야 합니다.)

udev에 의해 시작된 프로그램은 데몬을 차단하므로 오랫동안 실행되지 않습니다. 나는 다음과 같은 방법으로 이 문제를 해결했습니다 at. 즉, 실제 작업에서 프로세스를 분리하는 것입니다.

$ cat /home/juser/path/script.sh
#!/bin/sh
echo /path/to/mountcopystuff.sh | at now

관련 정보