systemd:启动用户(无需密码)特定的服务,该服务在注销后保持活动状态

systemd:启动用户(无需密码)特定的服务,该服务在注销后保持活动状态

我正在尝试使用 systemd 运行用户特定服务。我的职业不是管理员,而是一名开发人员。

我目前正在 Ubuntu 16.04 上测试我的解决方案,但计划在 Centos 7 上部署该解决方案。我希望一切都不会改变。

然而直到现在我设法通过脚本做到了以下几点:

  1. 通过命令行启动时检查我的服务是否有效运行
  2. 创建用户约翰带有/home/john目录(我需要这个目录)但是没有密码。我读到过它会更安全(希望我没有犯错……)。
  3. 创建目录/home/john/.config/systemd/user来存储我的服务文件。
  4. 根据以下条件启用徘徊本文档

所以现在我想测试打开与约翰的会话并启动服务,但不起作用。我正在尝试执行以下操作:

sam$ sudo su - john
john$ systemctl --user status my-service.service

并收集这些不愉快的事情:

Failed to connect to bus: No such file or directory

并且无论status/start/stop/list-units我用什么命令来代替上述状态,它总是相同的消息。

将我连接到约翰的会话的命令通过以下行记录:

$journalctl -e

Jun 15 18:16:23 sam-dell sudo[5681]:      sam : TTY=pts/2 ; PWD=/home/sam/IdeaProjects ; USER=root ; COMMAND=/bin/su - john
Jun 15 18:15:02 sam-dell su[5491]: Successful su for john by root
Jun 15 18:15:02 sam-dell su[5491]: + /dev/pts/2 root:john
Jun 15 18:15:02 sam-dell su[5491]: pam_unix(su:session): session opened for user john by (uid=0)
Jun 15 18:15:02 sam-dell su[5491]: pam_systemd(su:session): Cannot create session: Already running in a session

...当我尝试这些systemctl命令时什么也没有发生。

注意:我为我的用户添加了密码,但它仍然无法从我用户的 gnome 会话中打开的终端运行。但由于我的用户现在有密码,Ubuntu 允许我使用 gnome 连接到它,我可以通过登录到 john gnome 会话毫无问题地sam运行。systemctl --user status/start/stop

有人有想法吗?我可能以错误的方式处理了这个问题,我只是想在我的远程服务器上以另一个用户的身份运行 systemd 服务,所以我想我做得对,但也许不对。

非常感谢您的帮助

答案1

注意su 不创造嵌套登录会话。在 Sam 的会话中启动的所有进程仍然属于它。

您必须通过控制台、gdm、ssh 或machinectl login .host(我认为有更短的别名)登录,因为它们都是从头开始的。(虽然……我不确定为什么单独启用 linger 不会启动 systemd 实例。它应该会启动。)

systemctl 本身不需要处于正确的会话中(您可以使用 sudo -u 命令),但它依赖于 $XDG_RUNTIME_DIR 环境变量来查找 systemd 实例。它通常应设置为/run/user/<UID>,并且该目录应该有一个bus套接字或systemd/private一个。

相关内容