首页 文章

udev cdrom规则无法运行脚本

提问于
浏览
-1

以下是/etc/udev/rules.d/10-autodvd.rules中的规则文件

SUBSYSTEM=="block", KERNEL=="sr0", ENV{ID_CDROM_MEDIA_DVD}=="1", ACTION=="change", RUN+="/usr/local/bin/makemkv.sh sr0"
SUBSYSTEM=="block", KERNEL=="sr1", ENV{ID_CDROM_MEDIA_DVD}=="1", ACTION=="change", RUN+="/usr/local/bin/makemkv.sh sr1"
SUBSYSTEM=="block", KERNEL=="sr2", ENV{ID_CDROM_MEDIA_DVD}=="1", ACTION=="change", RUN+="/usr/local/bin/makemkv.sh sr2"
SUBSYSTEM=="block", KERNEL=="sr3", ENV{ID_CDROM_MEDIA_DVD}=="1", ACTION=="change", RUN+="/usr/local/bin/makemkv.sh sr3"
SUBSYSTEM=="block", KERNEL=="sr4", ENV{ID_CDROM_MEDIA_DVD}=="1", ACTION=="change", RUN+="/usr/local/bin/makemkv.sh sr4"

实际上运行脚本似乎真的很受欢迎,有没有更好的方法呢?

1 回答

  • 1

    Udev在词汇上对规则文件进行排序,并且在应用规则时, ID_CDROM_MEDIA_DVD 变量可能尚未设置 . 在默认安装systemd udev时就是这种情况 . ID_CDROM* 变量在 60-cdrom_id.rules 中设置,因此您应该重命名规则文件以在此之后进行排序 .

    请注意,您不应该使用RUN =键启动长时间运行的程序 .

    RUN
    [...]
    这只能用于非常短时间的运行
    前台任务 . 运行事件进程
    很长一段时间可能会进一步阻止
    此设备或从属设备的事件 .

    启动守护进程或其他长时间运行
    过程不适合udev;该
    分叉的进程,分离与否,将是
    事件处理后无条件杀死
    已完成 .

    您的规则可以写成一条规则:

    SUBSYSTEM=="block", KERNEL=="sr[0-4]", ENV{ID_CDROM_MEDIA_DVD}=="1", ACTION=="change", RUN+="/usr/local/bin/makemkv.sh %k"
    

相关问题