Запись файлов на usb при подключении через /etc/udev/rules.d/

Запись файлов на usb при подключении через /etc/udev/rules.d/

Я пытаюсь записать несколько файлов на USB при подключении его в Linux.
На самом деле, у меня есть файл /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

  • Похожий случай есть и здесь:Почему мои правила udev запускаются, если я использую триггер udevadm, но НЕ во время загрузки?.Ответ ФеамартоКажется, это лучше моего решения. Он ждет, пока его файловая система не будет готова в 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
      

Связанный контент