【发布时间】:2022-08-05 16:33:10
【问题描述】:
Systemd 允许使用 SYSTEMD_USER_WANTS 环境和 StopWhenUnneeded 选项从 udev 规则启动/停止服务。但是,插入设备时将启动服务,并在移除设备时停止服务。我需要的是反之亦然:
- 移除设备后启动服务
- 插入设备时停止服务
由于它是用户服务,从 udev 规则运行 \'systemctl start/stop ...\' 失败。
Systemd 允许使用 SYSTEMD_USER_WANTS 环境和 StopWhenUnneeded 选项从 udev 规则启动/停止服务。但是,插入设备时将启动服务,并在移除设备时停止服务。我需要的是反之亦然:
由于它是用户服务,从 udev 规则运行 \'systemctl start/stop ...\' 失败。
这个问题的 udev 规则是
..., ACTION=="add", RUN+="/usr/bin/su USER -c 'systemctl --user stop my-service'"
..., ACTION=="remove", RUN+="/usr/bin/su USER -c 'systemctl --user stop my-service'"
重点是:
SYSTEMD_WANTS/SYSTEMD_USER_WANTS,因为启动/停止与设备添加/删除不匹配。su + systemctl --user 启动/停止其他用户的服务。RUN udev 密钥应该来自/usr/lib/udev 或必须使用绝对传递 (man udev)。
【讨论】: