我刚刚在arch-linux系统(2012.09.07)上完成了systemd的安装和设置过程。我卸载了initscripts
(并删除了配置文件)。
我想做的是创建一个可以由非root用户启动和停止的服务。该服务将启动运行rtorrent的独立屏幕会话。但是,我希望系统上已将此服务设置为启动(启用)的每个用户都专门为他们启动了特定实例。人们将如何去做呢?
我记得曾经读过systemd支持用户的服务实例,但是我找不到任何有关如何设置它或它是否与我要寻找的内容有关的信息。
我用于系统的服务文件:
[Unit]
Description=rTorrent
[Service]
Type=forking
ExecStart=/usr/bin/screen -d -m -S rtorrent /usr/bin/rtorrent
ExecStop=/usr/bin/killall -w -s 2 /usr/bin/rtorrent
UPDATE#1:
阅读完这里和此处的手册页后,我了解systemd的工作原理要好一些。特别是,使用User=
和WorkingDirectory=
选项允许在用户会话中启动服务。然而,问题仍然是用户本身不能start
,stop
,enable
,或disable
服务。一个访问被拒绝错误由下式给出systemctl
。
UPDATE#2:
首先,为了简化和更好地使用systemd的用户会话(仍然有些不完整)功能,我使用了sofa的user-session-units,并遵循了他的配置建议。
在当前版本的DBus(1.6.4-1)中似乎存在一个错误,该错误中没有设置环境变量,DBUS_SESSION_BUS_ADDRESS
这意味着使用systemctl --user
命令error时会出现以下错误:
Failed to get D-Bus connection: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11
该变量应如下所示:
DBUS_SESSION_BUS_ADDRESS="unix:path=/run/user/USERUID/dbus/user_bus_socket"
其中USERUID必须是给定用户的UID。
sudo
为用户进行简单设置,并让他们控制自己的服务文件,如我上面的评论中所述。但是,该解决方案还允许用户控制大多数其他服务……
sudo
的文档,则不会— sudoers(5)上有许多限制命令参数的示例。