![如何让脚本在设备连接时“始终启动”?](https://linux22.com/image/925093/%E5%A6%82%E4%BD%95%E8%AE%A9%E8%84%9A%E6%9C%AC%E5%9C%A8%E8%AE%BE%E5%A4%87%E8%BF%9E%E6%8E%A5%E6%97%B6%E2%80%9C%E5%A7%8B%E7%BB%88%E5%90%AF%E5%8A%A8%E2%80%9D%EF%BC%9F.png)
我正在尝试在设备连接时运行脚本。我的 udev 和 systemd 文件已加载并触发,但只会启动一次脚本。如果我断开并重新连接设备,脚本将不再启动。我发现在脚本末尾重新加载 systemctl 将解决此问题(此方法仅适用于“用户”systemd 服务)。在以前的 Ubuntu 版本中,我能够简单地将 udev 与 systemd 一起使用,并且每次都能正常工作。无论我使用“用户”还是“系统”服务文件都无关紧要。它们都可以正常工作,这也允许我以 root 身份运行命令。
我不认为我的脚本是问题所在,因为简单的文件启动或通知发送命令只有在重新加载 systemctl 后(或者重新启动时)才会起作用。
如何使用 systemd,而不必不断重新加载 systemctl 才能使其工作?此外,如果可能的话,我如何重新获得 systemd/system 的使用权,以便能够以 root 身份运行脚本?
编辑:我正在使用 Ubuntu 20.04 的桌面版本。
我使用过该命令systemctl status
,它显示我的服务失败了(不是我的自定义服务文件)。我禁用了该服务并重新加载。没有更多失败的服务,但我原来的问题仍然存在。
答案1
OP 的回答(已从问题中删除):
固定的:我将其添加
ENV{SYSTEMD_USER_WANTS}+="myfile.service"
到我的 udev 文件中,它似乎已经解决了这个问题。感谢 bac0n建议。此外,我也感谢所有奉献时间的志愿者。
我的
udev
参赛作品:ACTION=="add", ATTRS{product}=="DTK-2100", ATTRS{idProduct}=="00cc", ATTRS{idVendor}=="056a", TAG+="systemd"
我的
systemd
参赛作品:[Service] Type=forking Restart=no ExecStart=/home/anon/xsetwacom.sh [Install] WantedBy=default.target WantedBy=sys-devices-pci0000:00-0000:00:1a.2-usb5-5\x2d1-5\x2d1:1.0.device