/etc/udev/rules.d/로 연결할 때 USB에 파일 쓰기

/etc/udev/rules.d/로 연결할 때 USB에 파일 쓰기

Linux에 연결할 때 USB에 일부 파일을 쓰려고합니다.
실제로 다음과 같은 파일이 있습니다 /etc/udev/rules.d/.

ACTION=="add",  ENV{ID_FS_UUID}=="9FE8-99G3", RUN+="/usr/bin/sudo -u myuser /home/myuser/Scripts/mycrazy.sh"

에는 mycrazy.sh다음이 있습니다.

## Path to mounted device
PATH_USB=/run/media/myuser/9FE8-99G3

mkdir $PATH_USB/some_folder

mkdir /home/myuser/Documents/another_folder

첫 번째 mkdir은 작동하지 않습니다. 그러나 두 번째는 작동합니다.
USB에 파일을 어떻게 쓸 수 있나요? 내 스크립트에 뭔가 빠졌나요?

답변1

  • 나에게 맞는 것은 지연( sleep)과 disown중간 스크립트를 사용하여 지연이 있는 스크립트를 추가하는 것입니다.

    RUN{type}

    ...
           This can only be used for very short-running foreground tasks.
           Running an event process for a long period of time may block all
           further events for this or a dependent device.
    
           Starting daemons or other long running processes is not appropriate
           for udev; the forked processes, detached or not, will be
           unconditionally killed after the event handling has finished.
    

    원천: man udev

  • 여기에도 비슷한 경우가 있습니다:udevadm 트리거를 사용하면 udev 규칙이 실행되지만 부팅 시에는 실행되지 않는 이유는 무엇입니까?.Fëamarto의 답변여기 내 솔루션보다 나은 것 같습니다. 파일 시스템이 rw모드에서 준비될 때까지 기다립니다. 시도해 볼 수도 있습니다.

    USB 드라이브이기 때문에 장착하기 전에 제거할 수 있습니다. 스크립트는 다음에 재부팅할 때까지 살아 있거나 다시 연결되어(다른 인스턴스를 트리거함) 마운트됩니다.

    이 문제를 해결하는 한 가지 방법은 관련 항목이 /dev/sdxY여전히 존재하는지 확인하는 것입니다. 각 사이클마다.

  • 내 설정은 다음과 같습니다.

    1. /etc/udev/rules.d/99-sneetsher-tests.rules

      ACTION=="add", ENV{ID_FS_UUID}=="6664-B2DA", RUN+="/usr/bin/sudo -u user /home/user/mycrazy.sh"
      
    2. /home/user/mycrazy.sh

      #!/bin/sh
      
      /home/user/mycrazy2.sh & disown
      
    3. /home/user/mycrazy2.sh

      #!/bin/sh
      
      PATH_USB=/media/user/MYFLASH3
      sleep 5
      mkdir $PATH_USB/some_folder
      

관련 정보