插入 DVD 时如何启动 systemd 服务?

插入 DVD 时如何启动 systemd 服务?

我正在尝试编写一个简单的systemd服务,当我将 DVD 插入 DVD-ROM 驱动器时,该服务就会启动。但是,即使我SYSTEMD_WANTS在运行时看到相关信息,我的服务也从未启动udevadm monitor --env。我可以手动启动该服务,并且它可以按预期工作。

以下是我所拥有的:


/etc/systemd/system/test.service

[Unit]
Description=just touch /tmp/pizza

[Service]
Type=oneshot
ExecStart=/usr/sbin/touch /tmp/pizza
RemainAfterExit=yes
ExecStop=/usr/sbin/rm -v /tmp/pizza

/etc/udev/rules.d/98-dd-one-from-udev.rules

KERNEL=="sr[0-9]*", ENV{DEVTYPE}=="disk", TAG+="systemd", ENV{SYSTEMD_WANTS}+="test.service"

当我用手动启动我的服务时,sudo systemctl start test.service我看到文件/tmp/pizza出现,以及预期的快乐的事情journalctl

当我监视输出时,udevadm monitor --env我看到我的SYSTEMD_WANTS环境变量按预期设置:

...
ID_SERIAL=MATSHITA_UJDA750_DVD_CDRW-0:0
ID_TYPE=cd
ID_USB_DRIVER=usb-storage
ID_USB_INTERFACES=:080650:
ID_USB_INTERFACE_NUM=00
ID_VENDOR=MATSHITA
ID_VENDOR_ENC=MATSHITA
ID_VENDOR_ID=05e3
MAJOR=11
MINOR=1
SEQNUM=1822
SUBSYSTEM=block
SYSTEMD_WANTS=test.service  <--- Woohoo!
TAGS=:seat:systemd:uaccess:
USEC_INITIALIZED=6417

然而,我的服务从未启动......

我在这里遗漏了什么联系?

不管怎样,我正在运行 Arch Linuxsystemd版本 218。

答案1

SYSTEMD_WANTS仅处理“添加”/“删除”事件。对于 CD 驱动器,这些事件仅发送对于设备本身不是对于媒体 – 因此当检测到 DVD-ROM 驱动器时,服务就会启动,而当拔下驱动器时,服务就会停止,无论驱动器里面有什么。

媒体变化被报告为“变化”事件,而 systemd 不会处理这些事件,因为它需要了解每种设备类型的特定属性。

udevadm monitor --udev

相关内容