Escriba archivos en USB cuando se conecte mediante /etc/udev/rules.d/

Escriba archivos en USB cuando se conecte mediante /etc/udev/rules.d/

Estoy intentando escribir algunos archivos en USB cuando lo conecto en Linux.
En realidad, tengo un archivo /etc/udev/rules.d/con:

ACTION=="add",  ENV{ID_FS_UUID}=="9FE8-99G3", RUN+="/usr/bin/sudo -u myuser /home/myuser/Scripts/mycrazy.sh"

En mycrazy.shtengo:

## Path to mounted device
PATH_USB=/run/media/myuser/9FE8-99G3

mkdir $PATH_USB/some_folder

mkdir /home/myuser/Documents/another_folder

El primer mkdir no funciona. Pero el segundo funciona.
¿Cómo puedo escribir archivos en USB? ¿Falta algo en mi guión?

Respuesta1

  • Lo que me funciona es agregar retraso ( sleep) y disownel script que tiene retraso usando un script intermedio.

    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.
    

    fuente: man udev

  • Hay un caso similar aquí:¿Por qué se ejecutan mis reglas de udev si uso el activador de udevadm, pero NO en el momento del arranque?.La respuesta de FëamartoParece mejor que mi solución aquí. Espera hasta que su sistema de archivos esté listo en rwmodo. Puedes intentarlo.

    Debido a que se trata de una unidad USB, se puede quitar antes de montarla. El script permanecerá activo hasta el próximo reinicio o se conectará nuevamente (lo que desencadenará otra instancia) y se montará.

    Una forma de solucionarlo es comprobar si la relación /dev/sdxYtodavía existe. en cada ciclo.

  • He aquí mi arreglo:

    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
      

información relacionada