【问题标题】:udev cdrom rules failing to run scriptsudev cdrom 规则无法运行脚本
【发布时间】:2017-05-29 21:16:56
【问题描述】:

以下是我在 /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"

在实际运行脚本时似乎真的会受到影响,有没有更好的方法来做到这一点?

【问题讨论】:

    标签: udev


    【解决方案1】:

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

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

       RUN{type}
       [...]
           This can only be used for very short-running
           foreground tasks. Running an event process for
           a long period of time may block all further
           events for this or a dependent device.
    
           Starting daemons or other long-running
           processes is not appropriate for udev; the
           forked processes, detached or not, will be
           unconditionally killed after the event handling
           has finished.
    

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

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

    【讨论】:

      猜你喜欢
      • 2011-01-04
      • 2013-11-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多