Estou tentando escrever alguns arquivos em usb ao conectá-lo no linux.
Na verdade, tenho um arquivo /etc/udev/rules.d/
com:
ACTION=="add", ENV{ID_FS_UUID}=="9FE8-99G3", RUN+="/usr/bin/sudo -u myuser /home/myuser/Scripts/mycrazy.sh"
Em mycrazy.sh
, eu tenho:
## Path to mounted device
PATH_USB=/run/media/myuser/9FE8-99G3
mkdir $PATH_USB/some_folder
mkdir /home/myuser/Documents/another_folder
O primeiro mkdir não funciona. Mas o segundo funciona.
Como posso gravar arquivos em usb? Está faltando alguma coisa no meu script?
Responder1
O que funciona para mim é adicionar delay(
sleep
) edisown
o script que tem atraso usando um script intermediário.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.
fonte:
man udev
Há um caso semelhante aqui:Por que minhas regras do udev são executadas se eu uso o gatilho do udevadm, mas NÃO no momento da inicialização?.A resposta de Fëamartoparece melhor do que minha solução aqui. Ele espera até que seu sistema de arquivos esteja pronto no
rw
modo. Você pode tentar.Por se tratar de uma unidade USB, ela pode ser removida antes da montagem. O script permanecerá ativo até a próxima reinicialização ou será conectado novamente (o que aciona outra instância) e montado.
Uma maneira de corrigir isso é verificar se o relacionado
/dev/sdxY
ainda existe. em cada ciclo.Aqui está minha configuração:
/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