Debian / CentOS / Fedoraなどの現在のLinuxディストリビューションでUSBデバイスプラグインを介してカスタムスクリプトを自動化する最先端の方法は何ですか?
たとえば、UUID(またはデバイスIDなど)に基づいてUSB大容量記憶装置を自動的にマウント/コピー/マウント解除する場合です。
答え1
次のファイルにこのような行を置きます/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
使えます。ATTRS
一つスタンザ:任意のスタンザを選択できますが、句ATTRS
はすべて同じスタンザに属している必要があり、混合して一致させることはできません。ATTRS
さまざまなセクションにリストされている他の種類の条項と条項を混在させることができます。
答え2
/lib/udev/rules.d
ディスク関連ルールの例を見てみました。 Ubuntuシステムでは、ルールファイルはID_FS_UUID_ENC
独自のルールファイルで使用できる環境変数を提供します。
だからカスタムルールファイルを/etc/udev/rules.d/foodevice.rules
。ただし、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"
(これはルールです。udevには行連続メカニズムがないため、ENV句の後の改行文字を削除する必要があります。)
udevによって起動されたプログラムはデーモンをブロックするので、長い間実行されません。私は次の方法でこの問題を解決しましたat
。つまり、実際の作業からプロセスを分離することです。
$ cat /home/juser/path/script.sh
#!/bin/sh
echo /path/to/mountcopystuff.sh | at now