Upstart调用脚本(用于插入USB驱动器)

时间:2009-02-26 09:40:50

标签: linux bash detect usb-drive upstart

我知道Ubuntu(和Fedora)使用Upstart而不是经典的System V init守护进程(SysVinit)。

我想知道如何检测插入USB驱动器的时间,安装它并将一些文件复制到它。我希望Upstart为此调用我自己的脚本。

如果可能,我希望Upstart为特定的 USB驱动器调用脚本,这样我就可以获得除“我的”即时备份“USB驱动器之外的每个USB驱动器的正常功能

如果Upstart可以将USB驱动器标识字符串作为参数发送到我的脚本,我想这将是理想的解决方案,因为我可以在我的脚本中使用id字符串并且可能使脚本处理两个USB - 没有太大变化的驱动器。

作为旁注,您是否知道除了Upstart以外的任何其他系统处理USB驱动器,网络安装文件系统等等? (作为SysVinit seems not to。)

2 个答案:

答案 0 :(得分:8)

upstart似乎没有附带“usb设备插入”信号。到目前为止,重点一直是做与init完全相同的事情,并且“酷炫的广告功能”将来会出现。

From the Fedora wiki:“......现在让Upstart成为现实,即使它现在只能像SysV那样运作,也会让我们开始顺利过渡到这个模型。”

幸运的是,您可以通过让udev运行脚本来发送自定义的upstart信号来实现未来,这样新贵可以调用您的备份脚本。您也可以让udev直接调用您的备份脚本。

udev已经有一种简单的方法可以在插入和拔出设备时运行脚本。见rename your usb hard drive's device name with udev rules。在我的系统上,我必须使用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替换ID_SERIAL_SHORT,并使用脚本查找备份设备所需的任何udev环境变量替换$env{NAME}。您可能需要对脚本进行后台处理以避免阻止udev。

如果您想使用新手,您可以让您的udev规则运行/sbin/initctl emit back-it-up VARIABLE=$env{VARIABLE} ...,然后在/etc/event.dstart on back-it-up开始编写脚本。

另请参阅How can I listen for 'usb device inserted' events in Linux, in Python?,了解有关对DBus执行相同操作的提示。如果您希望登录用户运行用户模式“监视备份驱动器”守护程序,则DBus可能会更方便。

答案 1 :(得分: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解决方案,您可以向用户弹出通知并提供简单的用户控制。