我正在尝试编写一个简单的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