Debian/CentOS/Fedoraのような現在のLinuxディストリビューションのUSBデバイスプラグインでカスタムスクリプトを自動的に実行する最先端の方法は何ですか?
たとえば、UUID(またはデバイスIDなど)に基づいて一部のファイルを自動的にマウント/コピー/ USB大容量ストレージデバイスをアンマウントする場合などです。
このような行を/etc/udev/rules.d
のファイルに入れます。
KERNEL=="sd*", ATTRS{vendor}=="Yoyodyne", ATTRS{model}=="XYZ42", ATTRS{serial}=="123465789", RUN+="/pathto/script"
NAME="subdir/mydisk%n"
の下にカスタムエントリパスを使用する場合は、/dev
のような句を追加します。
udevadm info -a -n sdb
を実行して、照合できる属性を確認します(attribute=="value"
; sdb
を、/dev
で作成された新しいエントリに対応する、ディスクに自動的に割り当てられたデバイス名に置き換えます差し込んだとき)。 oneスタンザからATTRS
句を使用できることに注意してください。任意のスタンザを選択できますが、ATTRS
句はすべて同じスタンザから取得する必要があります。 tミックスアンドマッチ。 ATTRS
句を、別のスタンザにリストされている他のタイプの句と混在させることができます。
ディスク関連のルールの例については、/lib/udev/rules.d
を調べました。 Ubuntuシステムでは、1つのルールファイルが環境変数ID_FS_UUID_ENC
を提供し、これを独自のルールファイルで使用できます。
したがって、カスタムルールファイルを/etc/udev/rules.d/foodevice.rules
の下に置きます。番号が前に付いていないので、ついにudevによって実行されます。ところで、udevデーモンは、ファイルの変更時に再起動する必要がないように、/etc/udev/rules.d
の変更を監視しました。
/etc/udev/rules.d/foodevice.rules
の内容は次のとおりです。
ACTION=="add", KERNEL=="sd*[!0-9]", ENV{ID_FS_UUID_ENC}=="FFFF-AAAF",
RUN+="/usr/bin/Sudo -u juser /home/juser/path/script.sh"
(これは1つのルールです-udevには行継続メカニズムがないため、ENV句の後の改行を削除する必要があります)
Udevによって起動されたプログラムはデーモンをブロックします-したがって、それは長時間実行されるべきではありません。私はat
を介してそれを解決しました-つまり、実際の仕事をしているプロセスから切り離すことによって:
$ cat /home/juser/path/script.sh
#!/bin/sh
echo ~/path/mountcopystuff.sh | at now