web-dev-qa-db-ja.com

特定のディスクがホットスワップされたときにLinuxにbashスクリプトを実行させるにはどうすればよいですか?

オフサイトバックアップ用にローテーションされたハードドライブのセットがあります。単純なbashスクリプトにロールインしたディスクの1つを再挿入するときに、実行する必要のあるいくつかの手順があります。ディスクの1つがホットスワップされたときにスクリプトを自動的に実行したいのですが。

理想的には、ディスクIDのリスト(/dev/disk/by-id/...)スクリプトをトリガーする必要があるディスクの場合。それらの1つが挿入されると、スクリプトが実行され、特定のディスクのIDがパラメーターとして渡されます。別の方法として、ディスクごとにスクリプトのコピーを用意し、各スクリプトをそれぞれのディスクに対して実行するだけで十分です。

私はUbuntuServer 14.04 LTSを実行していて、USBドライブに関連する同様の質問をざっと読み、使用する必要があると思われる2つのシステムとしてudevhotplugを見ています。誰かが私のニーズに合った特定の簡潔な解決策を教えてくれることを望んでいました。

3
STW

Udevルールを作成するための私の通常のアプローチは、/lib/udevで必要なものに類似したものを見つけて、グーグル検索またはマニュアルページのクイックルックで補完することです。

あなたの場合、ほとんどのモジョは/lib/udev/rules.d/60-persistent-storage.rulesにあります。私はこのルールを思いついた:

ACTION=="add", SUBSYSTEM=="block", ENV{ID_SERIAL}=="XXXXXXXX", PROGRAM="/opt/bin/myscript $env{ID_SERIAL}"

ドライブごとに1つのルールが必要であり、スクリプトはドライブのシリアルをパラメーターとして受け取ります。

ここではドライブシリアルのみを使用しています。これで十分ですが、/dev/disk/by-idに示すように、次の文字列を使用してID全体を再構築できます。

$env{ID_BUS}-$env{ID_SERIAL}

ドライブのシリアル番号を確認するには、次を使用できます。

udevadm info -n /dev/disk/by-id/XXXXXXXX | grep -i SERIAL
1
GnP