我正在修改我的工作 udev 规则 ( /etc/udev/rules.d/10-local.rules
):
SUBSYSTEM=="tty", ATTRS{idVendor}=="1366", ATTRS{idProduct}=="1015", ATTRS{serial}=="000621000000", SYMLINK+="ttymkw"
对此(行尾):
SUBSYSTEM=="tty", ATTRS{idVendor}=="1366", ATTRS{idProduct}=="1015", ATTRS{serial}=="000621000000", SYMLINK+="ttymkw", TAG+="systemd", SYSTEMD_WANTS="offnet-uart-log.service"
offnet-uart-log.service
我有用户服务~/.config/systemd/user
,我可以手动触发,但我还没有走到这一步。
, TAG+="systemd", SYSTEMD_WANTS="offnet-uart-log.service"
在我的 udev 规则末尾添加后,不会创建符号链接(我使用 重新加载sudo udevadm control --reload-rules && sudo udevadm trigger
)。
这告诉我规则是错误的,但我不知道为什么。可能与 udev 归 root 所有,而服务归用户所有有关吗?难道是我理解错了WANTS
?
我已经尝试了SYSTEM_USER_WANTS
or SYSTEM_WANTS
、 and =
or的所有四种组合+=
。删除*_WANTS
会使符号链接出现,因此错误位于*_WANTS
.
如何让我的tty设备触发日志服务?
编辑:正如我自己的回答中提到的,修改SYSTEM_USER_WANTS
为ENV{SYSTEM_USER_WANTS}
有效。为什么需要它?
答案1
这篇博文做我想做的事,多亏了它,我用 替换了它SYSTEMD_USER_WANTS
,ENV{SYSTEMD_USER_WANTS}
这使它工作了。
我仍然不明白为什么ENV{}
需要该构造,以及为什么我没有在文档中找到它。
答案2
如果你真的只是想扳机一项服务,您将添加
RUN{program}="/bin/systemctl --user start offnet-uart-log.service"
给你的乌德夫规则。这将要求您的服务属于oneshot
或类型exec
,以便调用systemd
在允许的通常较短的时间内返回udev
(请参阅此处的讨论如何在 Udev 事件上运行长时间进程?以及其他页面讨论udev
和自动安装。