“ unix:path =我需要一些可以由非特权用户控制的系统服务。为此,我想在〜/ .config / systemd / user /中使用systemd用户单元,并让用户通过systemctl --user start {service}
等进行停止和启动。
问题:这些单位文件应由puppet创建。由于似乎没有能够处理用户单位文件的人偶模块(如果这是systemd的固有限制,为什么还要有一个?),我只是在人偶中为人偶文件创建一个“文件”资源。 >
至少,当单位文件已更改时,我需要need来通知系统。
是否可以从用户p中为在非特权用户下运行的服务发布daemon-reload
?仅设置“ exec”资源并将“用户”属性设置为非特权用户的名称是行不通的。
编辑:澄清我的问题。
对我来说,问题似乎是带有exec
参数的user
资源似乎表现得完全像例如sudo -u myuser systemctl --user daemon-reload´. It fails to contact the correct dbus instance. To get this to work, you need to open a login shell for the user and set some environment variables with something like ´export XDG_RUNTIME_DIR="/run/user/$UID"´ and
export DBUS_SESSION_BUS_ADDRESS =“ unix:path = $ {XDG_RUNTIME_DIR} / bus”` 。(来自Can I control a user systemd using 'systemctl --user' after sudo su - myuser?)
我尝试使用exec
参数在environment
资源中执行此操作,但没有成功。
这是我尝试过的whar:
# issuing "daemon-reload" for the changed user-units $runtime_dir="/run/user/$facts['myuser_userid']" exec{ '/bin/systemctl --user daemon-reload': user => 'myuser', environment => [ "XDG_RUNTIME_DIR=${runtime_dir}", "DBUS_SESSION_BUS_ADDRESS="unix:path=${runtime_dir}/bus" ], }
$ facts [“ myuser_userid”]由外部事实提供。
“ unix:path =我需要一些可以由非特权用户控制的systemd服务。为此,我想在〜/ .config / systemd / user /中使用systemd用户单元,并让用户处理停止和...
我发现了问题,与p的exec
资源无关,但与p在更改单位文件之前执行了它有关。
我将这个问题标记为已解决。