it-swarm.com.de

Wie führe ich benutzerdefinierte Skripte auf dem USB-Geräte-Plug-In aus?

Was ist die neueste Methode zum automatischen Ausführen von benutzerdefinierten Skripten auf dem USB-Geräte-Plug-In unter aktuellen Linux-Distributionen wie Debian/CentOS/Fedora?

Zum Beispiel, wenn Sie einige Dateien automatisch mounten/kopieren/ein USB-Massenspeichergerät basierend auf seiner UUID (oder Geräte-ID usw.) umhängen möchten.

42
maxschlepzig

Fügen Sie eine Zeile wie diese in eine Datei in /etc/udev/rules.d Ein:

KERNEL=="sd*", ATTRS{vendor}=="Yoyodyne", ATTRS{model}=="XYZ42", ATTRS{serial}=="123465789", RUN+="/pathto/script"

Fügen Sie eine Klausel wie NAME="subdir/mydisk%n" Hinzu, wenn Sie unter /dev Einen benutzerdefinierten Eintragspfad verwenden möchten.

Führen Sie udevadm info -a -n sdb Aus, um zu sehen, mit welchen Attributen Sie übereinstimmen können (attribute=="value"; Ersetzen Sie sdb durch den Gerätenamen, der der Festplatte automatisch zugewiesen wird und dem neuen Eintrag entspricht, der in /dev Wenn Sie es anschließen). Beachten Sie, dass Sie ATTRS -Klauseln aus einer beliebigen Zeilengruppe one verwenden können: Sie können eine beliebige Zeilengruppe auswählen, aber die ATTRS -Klauseln müssen alle aus derselben Zeilengruppe stammen. t mischen und anpassen. Sie können ATTRS -Klauseln mit anderen Arten von Klauseln mischen, die in einer anderen Zeilengruppe aufgeführt sind.

Ich schaute in /lib/udev/rules.d für Beispiele für festplattenbezogene Regeln. Auf einem Ubuntu-System enthält eine Regeldatei die Umgebungsvariable ID_FS_UUID_ENC, die Sie in eigenen Regeldateien verwenden können.

Daher habe ich eine benutzerdefinierte Regeldatei unter /etc/udev/rules.d/foodevice.rules. Da ihm keine Nummer vorangestellt ist, wird es zuletzt von udev ausgeführt. Übrigens beobachtete der udev-Dämon /etc/udev/rules.d für Änderungen, sodass Sie sie bei Dateiänderungen nicht neu starten müssen.

Der Inhalt von /etc/udev/rules.d/foodevice.rules ist:

ACTION=="add", KERNEL=="sd*[!0-9]", ENV{ID_FS_UUID_ENC}=="FFFF-AAAF",
  RUN+="/usr/bin/Sudo -u juser /home/juser/path/script.sh"

(Dies ist eine Regel - Sie müssen die neue Zeile nach der ENV-Klausel entfernen, da udev keinen Mechanismus zur Fortsetzung der Zeile hat.)

Ein von udev gestartetes Programm blockiert den Daemon - daher sollte es nicht lange laufen. Ich habe es über at gelöst - d. H. Durch Trennen von dem Prozess, der die eigentliche Arbeit erledigt:

$ cat /home/juser/path/script.sh
#!/bin/sh
echo ~/path/mountcopystuff.sh | at now
14
maxschlepzig