我正在尝试使用 systemd 运行用户特定服务。我的职业不是管理员,而是一名开发人员。
我目前正在 Ubuntu 16.04 上测试我的解决方案,但计划在 Centos 7 上部署该解决方案。我希望一切都不会改变。
然而直到现在我设法通过脚本做到了以下几点:
- 通过命令行启动时检查我的服务是否有效运行
- 创建用户约翰带有
/home/john
目录(我需要这个目录)但是没有密码。我读到过它会更安全(希望我没有犯错……)。 - 创建目录
/home/john/.config/systemd/user
来存储我的服务文件。 - 根据以下条件启用徘徊本文档
所以现在我想测试打开与约翰的会话并启动服务,但不起作用。我正在尝试执行以下操作:
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
一个。