udev规则触发systemd服务

udev规则触发systemd服务

我正在修改我的工作 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_WANTSor SYSTEM_WANTS、 and =or的所有四种组合+=。删除*_WANTS会使符号链接出现,因此错误位于*_WANTS.

如何让我的tty设备触发日志服务?


编辑:正如我自己的回答中提到的,修改SYSTEM_USER_WANTSENV{SYSTEM_USER_WANTS}有效。为什么需要它?

答案1

这篇博文做我想做的事,多亏了它,我用 替换了它SYSTEMD_USER_WANTSENV{SYSTEMD_USER_WANTS}这使它工作了。

我仍然不明白为什么ENV{}需要该构造,以及为什么我没有在文档中找到它。

答案2

如果你真的只是想扳机一项服务,您将添加

RUN{program}="/bin/systemctl --user start offnet-uart-log.service"

给你的乌德夫规则。这将要求您的服务属于oneshot或类型exec,以便调用systemd在允许的通常较短的时间内返回udev(请参阅此处的讨论如何在 Udev 事件上运行长时间进程?以及其他页面讨论udev和自动安装。

相关内容