Grave arquivos em usb ao conectar por /etc/udev/rules.d/

Grave arquivos em usb ao conectar por /etc/udev/rules.d/

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) e disowno 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 rwmodo. 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/sdxYainda 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
      

informação relacionada