当前位置:  开发笔记 > 编程语言 > 正文

在sudo su - myuser之后,我可以使用'systemctl --user'来控制用户systemd吗?

如何解决《在sudosu-myuser之后,我可以使用'systemctl--user'来控制用户systemd吗?》经验,为你挑选了1个好方法。

我有一项服务,我想从系统启动开始.我已经为它构建了一个ap @ .service定义作为模板,因为可能有很多实例.

在root systemd中定义,这很好用,并启动和停止系统的服务.systemctl enable ap@inst1正如预期的那样安装服务实例.Root也可以毫无问题地启动和停止服务.该服务在其自己的帐户(myuser)中运行,而不是root,由ap @ .service模板中的User = myuser控制.

但我希望用户'myuser'能够在不影响系统安全的情况下启动和停止自己的服务.

我切换到使用用户systemd,并启用了延迟loginctl enable-linger myuser.然后,我启用~myuser/.config/systemd/user目录中定义的服务.现在,该服务按照设计与系统一起干净地启动和停止.如果我以"myuser"身份登录终端systemctl --user start ap@inst1,并且systemctl --user stop ap@inst1两者都能正常运行.

但是,如果我以其他用户(user2)身份登录并sudo su - myuser在终端中执行,则systemctl --user命令现在失败,并显示错误消息"无法获得D-Bus连接:没有此类文件或目录".

如何systemctl --usersudo su - myuser命令切换用户后启用?



1> NeilCasey..:

我在另一个网站上找到了答案,并使用不同的术语进一步搜索.

所需的解决方案是为shell提供信息以便为用户提供正确的DBUS.

通过在运行之前将以下环境变量添加到shell systemctl --user,可以消除DBUS问题,并且systemctl可以正常运行.

export XDG_RUNTIME_DIR="/run/user/$UID"
export DBUS_SESSION_BUS_ADDRESS="unix:path=${XDG_RUNTIME_DIR}/bus"

为了确保在sudo shell中可用DBUS_SESSION_BUS_ADDRESS,我将环境变量添加到目标用户标识的〜/ .bash_profile.这需要创建登录shell(sudo su - myusersudo -l myuser)以创建正确的环境.

或者,将环境变量的创建添加到〜/ .bashrc(或其他shell的等效项).然后将为所有贝壳创作重新建立环境.

推荐阅读
臭小子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有