我知道Ubuntu(和Fedora)使用Upstart而不是经典的System V init守护进程(SysVinit).
我想知道如何检测何时插入USB驱动器,安装它并将一些文件复制到它.我希望Upstart为此调用我自己的脚本.
如果有可能,我希望Upstart为特定的 USB驱动器调用脚本,这样除了我的"即时备份"USB驱动器之外,我将获得每个USB驱动器的正常功能.
如果Upstart可以将USB驱动器标识字符串作为参数发送到我的脚本,我想这将是理想的解决方案,因为我可以在我的脚本中使用id字符串并且可能使脚本处理两个USB驱动器而不用变化很大.
作为旁注,您是否知道除Upstart之外的任何其他系统,它以一种很好的方式处理USB驱动器,网络安装文件系统等?(因为SysVinit似乎没有.)
upstart
好像没有附带"usb设备插入"信号开箱即用.到目前为止,重点一直是做与init完全相同的事情,并且"酷炫的广告功能"将来也会如此.
来自Fedora wiki:"......现在让Upstart成为现实,即使它现在只能像SysV一样运作,也会让我们开始顺利过渡到这个模型."
幸运的是,您可以通过让udev运行脚本来发送自定义的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
.
另请参阅如何在Python中以Linux格式监听"usb device inserted"事件?有关使用DBus执行相同操作的提示.如果您希望登录用户运行usermode"watch for backup drive"守护程序,则DBus可能会更方便.