8

Ubuntu (および Fedora) は、従来の System V init デーモン (SysVinit) の代わりにUpstartを使用していることを知っています。

USBドライブが挿入されたことを検出し、マウントしてファイルをコピーする方法を知りたいです。Upstart に独自のスクリプトを呼び出してもらいたいです。

可能であれば、Upstart に特定のUSB ドライブのスクリプトを呼び出してもらいたいので、「インスタント バックアップ」USB ドライブを除くすべての USB ドライブで通常の機能が得られるようにします。

Upstart が USB ドライブの識別文字列を引数としてスクリプトに送信できれば、それが理想的なソリューションになると思います。多くの変化。

補足として、USB ドライブやネットワークにマウントされたファイル システムなどを適切に処理する Upstart 以外のシステムをご存知ですか? (SysVinitはそうではないようです。)

4

2 に答える 2

8

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.dstart on back-it-up

Python で Linux で「usb デバイスが挿入された」イベントをリッスンするにはどうすればよいですか?も参照してください。DBusで同じことを行うためのヒントについては。ログインユーザーにユーザーモードの「バックアップドライブの監視」デーモンを実行させたい場合は、DBusの方が便利かもしれません。

于 2009-02-27T13:45:36.253 に答える
4

Ubuntu 9.10 以降の Upstart には、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

シンプルでエレガントな新興企業が大好きです。ただし、洗練されていなくても、DBus ソリューションの方が優れている場合があります。DBus ソリューションを使用すると、ユーザーに通知をポップアップ表示して、ユーザーによる制御を容易にすることができます。

于 2010-08-18T17:44:31.440 に答える