Upstart 呼び出しスクリプト (挿入された USB ドライブ用)
質問
Ubuntu (および Fedora) が使用していることは知っています 成り上がり者 従来の System V init デーモン (SysVinit) の代わりに使用されます。
USB ドライブが挿入されたことを検出し、マウントし、そこにいくつかのファイルをコピーする方法を知りたいです。Upstart にこれ用の独自のスクリプトを呼び出してもらいたいと思います。
可能であれば、Upstart にスクリプトを呼び出してもらいたいのですが、 特定の これにより、「インスタント バックアップ」USB ドライブを除くすべての USB ドライブで通常の機能が得られます。
Upstart が USB ドライブ識別文字列を引数としてスクリプトに送信できれば、それが理想的な解決策になると思います。スクリプトに ID 文字列を含めることができ、スクリプトで 2 つの USB ドライブを処理できる可能性があります。多くの変化。
余談ですが、USB ドライブやネットワークにマウントされたファイル システムなどを適切に処理する Upstart 以外のシステムをご存知ですか?(として SysVinit はそうではないようです.)
解決
upstart
箱から出してすぐには「USBデバイスが接続されています」信号が付属していないようです。これまでのところ、init とほぼ同じことを行うことに重点が置かれており、「宣伝されているクールな機能」は将来提供される予定です。
Fedora wiki より:「...Upstart 自体を適切な位置に配置することで、たとえそれが現在 SysV と同じように機能するだけであっても、このモデルへのスムーズな移行を開始できるようになります。」
幸いなことに、udev にスクリプトを実行してカスタム upstart シグナルを送信させ、upstart がバックアップ スクリプトを呼び出せるようにすることで、将来の機能を自分で実装することができます。udev でバックアップ スクリプトを直接呼び出すこともできます。
udev
には、デバイスの接続時と切断時にスクリプトを実行する簡単な方法がすでに用意されています。見る udevルールを使用してUSBハードドライブのデバイス名を変更します. 。私のシステムでは、次のように使用する必要があります udevadm monitor --env
チュートリアルの代わりに udevmonitor --env
. 。チュートリアルに従った後、次のような別の udev ルールを作成します。
echo 'SUBSYSTEM=="block", ID_SERIAL_SHORT=="101A9041C67D182E", \
NAME="myusbdrive", \
RUN+="/my/backup/script $env{NAME}"' > /etc/udev/rules.d/S96-mydrive.rules
交換中 ID_SERIAL_SHORT
デバイスの実際の ID と $env{NAME}
スクリプトがバックアップ デバイスを見つけるために必要なあらゆる udev 環境変数を使用します。udev のブロックを避けるために、スクリプトをバックグラウンドで実行する必要がある場合があります。
upstart を使用したい場合は、udev ルールを実行させることができます /sbin/initctl emit back-it-up VARIABLE=$env{VARIABLE} ...
そしてスクリプトを書きます /etc/event.d
行から始まる start on back-it-up
.
こちらも参照 Linux または Python で「USB デバイス挿入」イベントをリッスンするにはどうすればよいですか? 同じことを行うためのヒントについては、 DBus. 。ログインしているユーザーにユーザーモードの「バックアップ ドライブを監視する」デーモンを実行させたい場合は、DBus の方が便利かもしれません。
他のヒント
Ubuntuの9.10でと新しい成り上がりはupstart-udev-bridge
サービスを通じて、いくつかのudevの機能を備えています。
#thumbdrive_special.conf
start on block-device-added
task
script
if [ `blkid $DEV` -eq "YOUR-THUMBDRIVES-UUID" ]; then
/home/you/bin/thumbdrive_special $DEV
fi
end script
私は、シンプルかつエレガントな成り上がりがいかに愛します。しかし、Dバス・ソリューションは、あまりエレガントであれば良いかもしれません。 Dバスのソリューションを使用すると、ユーザーに通知をポップアップ表示し、簡単にユーザーコントロールを提供することができます。