非sudo用户可以添加systemd单位吗?

时间:2018-03-15 09:14:00

标签: rabbitmq ubuntu-16.04 backgroundworker systemd supervisord

我有一对应用程序,有很多crons和daemon worker(rabbitmq使用者)。

我想授予某些用户部署应用的权限,但不授予管理权限。问题是:守护进程工作者由systemd单元管理,更改systemd单元需要root访问权。

我们如何解决这个问题?我知道我可以使用supervisord而不是systemd,但这是最后的手段,我真的不想切换到它。

1 个答案:

答案 0 :(得分:1)

您不能允许用户以root用户身份(或任何其他用户)启动服务,但用户可以使用user bus启动单位,只需将其放入~/.config/systemd/user/(创建目录)如果不存在),那么你可以

  systemctl --user daemon-reload
  systemctl --user start <your service>.service
  systemctl --user status <your service>.service

用户也可以使用相同的用户总线启动“ transient units ”作为他们自己,然后管理它们(启动,停止,终止,重启等)作为常规单位。

瞬态单位与普通单位完全相同,但无法在服务器重启后继续存在......

您使用systemd-run --user启动它们,然后使用systemctl --user

进行管理

例如

$ systemd-run --user /bin/sleep 300
Running as unit: run-r6545f2e54ffc4f30b15f5dcabb280e5a.service

$ systemctl --user status run-r6545f2e54ffc4f30b15f5dcabb280e5a.service
● run-r6545f2e54ffc4f30b15f5dcabb280e5a.service - /bin/sleep 300
    Loaded: loaded (/run/user/1000/systemd/transient/run-r6545f2e54ffc4f30b15f5
    Transient: yes
    Active: active (running) since Thu 2018-03-15 20:31:52 PDT; 15s ago
    Main PID: 21095 (sleep)
    CGroup: /user.slice/user-1000.slice/user@1000.service/run-r6545f2e54ffc4f30
           └─21095 /bin/sleep 300

$ systemctl --user stop run-r6545f2e54ffc4f30b15f5dcabb280e5a.service

$ systemctl --user status run-r6545f2e54ffc4f30b15f5dcabb280e5a.service
Unit run-r6545f2e54ffc4f30b15f5dcabb280e5a.service could not be found.

请注意较旧的systemd,请确保dbus在您的系统上运行,并且对用户可访问,一般情况下请确保设置了DBUS_SESSION_BUS_ADDRESSXDG_RUNTIME_DIR环境变量。