簡體   English   中英

新貴調用腳本(用於插入的 USB 驅動器)

[英]Upstart calling script (for inserted USB-drive)

我知道 Ubuntu(和 Fedora)使用Upstart而不是經典的 System V init 守護進程(SysVinit)。

我想知道如何檢測何時插入 USB 驅動器、掛載它並將一些文件復制到其中。 我希望 Upstart 為此調用我自己的腳本。

如果可能的話,我希望 Upstart 為特定的 USB 驅動器調用腳本,這樣我就可以獲得除“即時備份”USB 驅動器之外的每個 USB 驅動器的正常功能。

如果 Upstart 可以將 USB 驅動器標識字符串作為參數發送到我的腳本,我想這將是理想的解決方案,因為我可以在腳本中包含 id 字符串,並且可能使腳本處理兩個 USB 驅動器而無需變化很大。

順便說一句,你知道除了 Upstart 之外的任何其他系統,它以一種很好的方式處理 USB 驅動器、網絡安裝的文件系統等? (因為SysVinit 似乎不是。)

upstart似乎沒有開箱即用的“usb device plugged in”信號。 到目前為止,重點一直是做與 init 幾乎完全相同的事情,並且“很酷的廣告功能”是在未來。

來自 Fedora wiki :“......現在讓 Upstart 本身就位,即使它現在只能像 SysV 那樣運行,也將使我們能夠開始向這個 model 平穩過渡。”

幸運的是,您可以通過讓 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 通過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 解決方案,您可以向用戶彈出通知並提供簡單的用戶控制。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM