Schreiben Sie Dateien auf USB, wenn Sie über /etc/udev/rules.d/ eine Verbindung herstellen.

Schreiben Sie Dateien auf USB, wenn Sie über /etc/udev/rules.d/ eine Verbindung herstellen.

Ich versuche, einige Dateien auf das USB-Gerät zu schreiben, wenn ich es unter Linux anschließe.
Tatsächlich habe ich darauf eine Datei /etc/udev/rules.d/mit:

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

In mycrazy.shhabe ich:

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

mkdir $PATH_USB/some_folder

mkdir /home/myuser/Documents/another_folder

Das erste mkdir funktioniert nicht. Aber das zweite funktioniert.
Wie kann ich Dateien auf USB schreiben? Fehlt etwas in meinem Skript?

Antwort1

  • Was bei mir funktioniert, ist das Hinzufügen von delay ( sleep) und disowndem Skript, das die Verzögerung mithilfe eines Zwischenskripts aufweist.

    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.
    

    Quelle: man udev

  • Einen ähnlichen Fall gibt es hier:Warum werden meine Udev-Regeln ausgeführt, wenn ich den Udevadm-Trigger verwende, aber NICHT beim Booten?.Fëamartos Antwortscheint besser als meine Lösung hier. Es wartet, bis sein Dateisystem im rwModus bereit ist. Sie können es versuchen.

    Da es sich um ein USB-Laufwerk handelt, kann es vor dem Mounten entfernt werden. Das Skript bleibt bis zum nächsten Neustart aktiv oder wird erneut angeschlossen (wodurch eine weitere Instanz ausgelöst wird) und gemountet.

    Eine Möglichkeit, dies zu beheben, besteht darin, in jedem Zyklus zu prüfen, ob /dev/sdxYnoch eine zugehörige Komponente vorhanden ist.

  • Hier ist mein Setup:

    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
      

verwandte Informationen