Grava arquivos em usb quando conectado por /etc/udev/rules.d/

1

Estou tentando gravar alguns arquivos em usb quando conecto em linux ..
Na verdade, eu tenho um arquivo em /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 , 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 escrever arquivos no usb? Está faltando alguma coisa no meu script?

    
por Rafael Soufraz 08.07.2015 / 18:32

1 resposta

1

  • O que funciona para mim, adicionando atraso ( sleep ) e disown do script que está atrasado 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.
    

    source: man udev

  • Há um caso semelhante aqui: A resposta de Fëamarto parece melhor que a minha solução aqui. Ele aguarda até que o sistema de arquivos esteja pronto no modo rw . Você pode tentar.

    Como esta é uma unidade USB, ela pode ser removida antes da montagem. O script permanecerá ativo até a próxima reinicialização ou será plugado novamente (o que acionará outra instância) e montado.

    Uma maneira de corrigir isso é verificar se o /dev/sdxY ainda existe. em cada ciclo.

  • Aqui está minha configuração:

    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
      
por user.dz 10.07.2015 / 08:41