Я пытаюсь записать некоторые файлы в 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? Пропускает что-то в моем сценарии?
Какие работы для меня, добавляя задержку (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, но НЕ во время начальной загрузки?. Ответ Fëamarto кажется лучше, чем мое решение здесь. Это ожидает, пока его файловая система не готова в rw
режим. Можно дать ему попытку.
Поскольку это - Карта памяти, она может быть удалена перед монтированием. Сценарий останется в живых, пока следующая перезагрузка или он не включаются снова (которые инициировали другой экземпляр), и смонтированный.
Один способ зафиксировать, который должен проверить, если связано /dev/sdxY
все еще существует. на каждом цикле.
Вот моя установка:
/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"
/home/user/mycrazy.sh
#!/bin/sh
/home/user/mycrazy2.sh & disown
/home/user/mycrazy2.sh
#!/bin/sh
PATH_USB=/media/user/MYFLASH3
sleep 5
mkdir $PATH_USB/some_folder