udev가 규칙을 트리거하지만 스크립트가 올바르게 실행되지 않습니다.

udev가 규칙을 트리거하지만 스크립트가 올바르게 실행되지 않습니다.

헤드리스 시스템의 빠르고 더러운 백업을 자동화하려고 합니다. (저는 Busybox 유틸리티를 실행하고 있으므로 이것이 제가 사용할 수 있는 설치 도구라는 점에 유의하는 것이 중요하다고 생각합니다.) USB 장치가 연결되면 스크립트를 실행하도록 udev 규칙을 만들었고 트리거 및 실행됩니다. 스크립트를 요청했습니다.

현재 스크립트는 장치를 마운트만 하고 이 작업을 수행할 수는 없습니다. 스크립트를 수동으로 실행하면 오류가 발생하지 않습니다. 나는 exec >/home/user/udev.out 2>&1그것이 실패한 이유를 알아내기 위해 그 줄을 추가했습니다.

스크립트 내용:

#!/bin/sh
exec >/home/user/udev.out 2>&1
mount -t ntfs-3g /dev/sdb1 /mnt/backup
exit 0

나는 스크립트에서 /dev/sdb1을 사용해서는 안 된다는 것을 알고 있으며 udev 규칙에서 심볼릭 링크를 생성했지만 단지 오류 확인을 위해 장치를 하드코딩했습니다.

또한 마운트 명령을 실행하기 전에 시스템이 장치를 감지할 수 있도록 하기 위해 마운트 명령 전에 3초의 절전 모드를 추가하려고 시도했지만 소용이 없었습니다.

udev.out 결과:

mount: mounting /dev/sdb1 on /mnt/backup failed: No such device

장치가 거기에 있고 fdisk에 나열되어 있다는 것을 알고 있습니다. 쉘에서 스크립트를 호출하면 문제 없이 성공적으로 실행됩니다.

이전에 비슷한 일을 겪은 사람이 있습니까? 어떻게 진행해야 할지 모르겠습니다.

편집: udev 규칙:

SUBSYSTEM=="block", ATTRS{serial}=="serialforusbdrive", SYMLINK+="kingston%n"
SUBSYSTEM=="usb", ATTRS{serial}=="serialforusbdrive", RUN+="/usr/local/bin/backup.sh"

편집: 설명: udev 규칙이 내 스크립트를 트리거하고 실행합니다. 쉘에서 수동으로 실행할 때의 스크립트( /usr/local/bin/backup.sh쉘을 입력하고 드라이브를 마운트함) udev 규칙(RUN+="/usr/local/bin/backup.sh")에 의해 실행될 때 스크립트는 스크립트를 실행하지만 드라이브를 마운트하지 못합니다.

답변1

마침내 문제를 해결했습니다.

문제는 모든 일의 타이밍과 관련이 있다고 생각합니다.

동일한 하위 시스템에 있도록 udev 규칙을 변경했습니다.

SUBSYSTEM=="block", ATTRS{serial}=="serialforusbdrive", SYMLINK+="kingston%n"
SUBSYSTEM=="block", ATTRS{serial}=="serialforusbdrive", RUN+="/usr/local/bin/backup.sh"

그런 다음 스크립트 시작 부분에 다음 줄을 추가합니다.

sleep 5
stat /dev/kingston1

모든 것의 타이밍이 약간 벗어난 것 같습니다. 디스크가 준비되기 전에 마운트를 시도하고 있으며 "USB" 하위 시스템이 "블록" 하위 시스템보다 먼저 실행되므로 스크립트가 실제로 실행될 때 내 심볼릭 링크가 존재하지 않습니다.

관련 정보