当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《Upstart调用脚本(用于插入USB驱动器)》经验,为你挑选了1个好方法。

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

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

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

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

作为旁注,您是否知道除Upstart之外的任何其他系统,它以一种很好的方式处理USB驱动器,网络安装文件系统等?(因为SysVinit似乎没有.)



1> joeforker..:

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可能会更方便.

推荐阅读
黄晓敏3023
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有