2009-02-26 6 views
8

私は、Ubuntu(およびFedora)が古典的なSystem V initデーモン(SysVinit)のUpstart isteadを使用していることを知っています。アップスタートコールスクリプト(USBドライブ挿入用)

USBドライブが挿入されたことを検出し、マウントしてファイルをコピーする方法を知りたいと思います。私はアップスタートがこのために自分のスクリプトを呼びたいと思います。

可能であれば、の特定の USBドライブのスクリプトを呼び出すことで、「インスタントバックアップ」USBドライブ以外のすべてのUSBドライブに対して通常の機能を得ることができます。

Upstartがスクリプトの引数としてUSBドライブの識別文字列を送信できるのであれば、私のスクリプトにid文字列を持つことができ、多くの変更なしにUSBドライブ。

また、USBドライブ、ネットワークマウントされたファイルシステムなどをうまく処理するUpstart以外のシステムを知っていますか? (As SysVinit seems not to

答えて

8

upstart「USBデバイスが差し込まれた」信号が入っていないようです。これまでのところ、initはinitと全く同じことをやっていましたが、将来は「クールな広告機能」があります。

From the Fedora wiki: "今はUpstart自体を稼働させていますが、SysVのように機能していても、このモデルにスムーズに移行することができます。"

幸いにも、udevにあなたのカスタムupstartシグナルを送信するスクリプトを実行させることで、未来を実装して、upstartがバックアップスクリプトを呼び出せるようにすることができます。 udevにバックアップスクリプトを直接呼び出させることもできます。

udevには、デバイスが接続されているときにスクリプトを実行する簡単な方法があります。 rename your usb hard drive's device name with udev rulesを参照してください。私のシステムでは、チュートリアルのudevmonitor --envの代わりにudevadm monitor --envを使用する必要があります。スクリプトは、バックアップデバイスを見つける必要があるものは何でもudevの環境変数(複数可)を使用して、デバイスの実際のIDとID_SERIAL_SHORTの交換

echo 'SUBSYSTEM=="block", ID_SERIAL_SHORT=="101A9041C67D182E", \ 
NAME="myusbdrive", \ 
RUN+="/my/backup/script $env{NAME}"' > /etc/udev/rules.d/S96-mydrive.rules 

、および$env{NAME}:チュートリアルに従った後、あなたはこのような別のudevのルールを作成します。 udevをブロックしないように、スクリプトのバックグラウンドを作成する必要があります。

upstartを使用する場合は、udevルールを/sbin/initctl emit back-it-up VARIABLE=$env{VARIABLE} ...にしてから、に始まり、start on back-it-upという文字列でスクリプトを作成します。

DBusで同じことを行うヒントについては、How can I listen for 'usb device inserted' events in Linux, in Python?も参照してください。ログインしたユーザーにusermode "バックアップ・ドライブの監視"デーモンを実行させたい場合は、DBusが便利です。

+0

ご回答いただきありがとうございます。質問があります。なぜ私はこれにUpstartを使用すべきではありませんか? (あなたは動機づけをしていませんでした) –

+0

Upstartは "USBドライブが接続されています"というメッセージを表示していないようですので、udev(またはdbus、...など)で自分自身を定義するか、バックアップスクリプトを直接呼び、多くのLinuxシステムと互換性があります。 – joeforker

+0

私はあなたのユースケースでは、バックアップサービスをユーザーに向けることを望んでいるので、DBusが行く方法だと思います。また、@ジョーカー - 素晴らしい答え! – Guss

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ソリューションを使用すると、ユーザーに通知をポップアップさせ、簡単にユーザーを制御できます。

関連する問題