【问题标题】:How to start systemd user service when device is removed, and stop it when device is inserted如何在移除设备时启动 systemd 用户服务,并在插入设备时停止它
【发布时间】:2022-08-05 16:33:10
【问题描述】:

Systemd 允许使用 SYSTEMD_USER_WANTS 环境和 StopWhenUnneeded 选项从 udev 规则启动/停止服务。但是,插入设备时将启动服务,并在移除设备时停止服务。我需要的是反之亦然:

  1. 移除设备后启动服务
  2. 插入设备时停止服务

    由于它是用户服务,从 udev 规则运行 \'systemctl start/stop ...\' 失败。

    标签: systemd udev


    【解决方案1】:

    这个问题的 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'"
    

    重点是:

    1. 应该使用 systemctl 启动/停止服务,而不是 SYSTEMD_WANTS/SYSTEMD_USER_WANTS,因为启动/停止与设备添加/删除不匹配。
    2. 使用su + systemctl --user 启动/停止其他用户的服务。
    3. 程序传递到RUN udev 密钥应该来自/usr/lib/udev 或必须使用绝对传递 (man udev)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多