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

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

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

如果 Upstart 可以将 USB 驱动器标识字符串作为参数发送给我的脚本,我想这将是理想的解决方案,因为我将能够在我的脚本中包含 id 字符串,并且可能使脚本处理两个 USB 驱动器而无需变化很大。

顺便说一句,除了 Upstart 之外,你还知道还有其他系统可以很好地处理 USB 驱动器、网络安装文件系统等吗?(作为 SysVinit 似乎没有.)

有帮助吗?

解决方案

upstart 似乎没有开箱即用的“USB 设备已插入”信号。到目前为止,重点是做与 init 几乎完全相同的事情,并且“很酷的广告功能”是在未来。

来自 Fedora 维基: :“……现在让 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.d 从线开始 start on back-it-up.

也可以看看 如何在 Linux 和 Python 中监听“USB 设备插入”事件? 有关执行相同操作的提示 数据库总线. 。如果您想让登录用户运行用户模式“监视备份驱动器”守护进程,DBus 可能会更方便。

其他提示

在Ubuntu 9.10的和更新的新贵具有穿过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归因
不隶属于 StackOverflow
scroll top