Systemd 与 tmux 中的 rtorrent

Systemd 与 tmux 中的 rtorrent

我无法使用 systemd 服务文件运行 tmux 和 rtorrent。我的rtorrent.service

[Unit]
Description=rTorrent
Documentation=https://github.com/rakshasa/rtorrent
After=network.target local-fs.target

[Service]
Type=forking
KillMode=none
User=rtorrent
ExecStart=/usr/bin/tmux -S /tmp/rtorrent.sock new-session -d -s rtorrent \'rtorrent -n -O import=/etc/rtorrent.rc\'
ExecStop=/usr/bin/tmux -S /tmp/rtorrent.sock send-keys -t rtorrent C-q
WorkingDirectory=/home/rtorrent

[Install]
WantedBy=default.target

(使用Type=oneshotwithRemainAfterExit=yes不起作用,而且我不相信这是一个解决方案。我认为tmux这种方式应该用 来完成Type=forking。如果我错了,请纠正我!)

输出systemctl status rtorrent

● rtorrent.service - rTorrent
   Loaded: loaded (/etc/systemd/system/rtorrent.service; disabled)
   Active: failed (Result: exit-code) since Mon 2015-04-27 10:48:37 AEST; 22s ago
     Docs: https://github.com/rakshasa/rtorrent
  Process: 4433 ExecStart=/usr/bin/tmux -S /tmp/rtorrent.sock new-session -d -s rtorrent 'rtorrent -n -O import=/etc/rtorrent/rtorrent.rc' (code=exited, status=1/FAILURE)

Apr 27 10:48:37 vagrant tmux[4433]: usage: new-session [-AdDP] [-c start-directory] [-F format] [-n window-name] [-s session-name] [-t target-session] [-x width] [-y height] [command]
Apr 27 10:48:37 vagrant systemd[1]: rtorrent.service: control process exited, code=exited status=1
Apr 27 10:48:37 vagrant systemd[1]: Failed to start rTorrent.
Apr 27 10:48:37 vagrant systemd[1]: Unit rtorrent.service entered failed state.

切换到rtorrent用户su允许我手动尝试该ExecStart命令 - 效果很好。我无法进一步调试这个。

想法?谢谢!

答案1

Execsystemd 对和其他键的值有自己的解释。因此,你不应该写得好像这将被传递给sh -c或类似的东西。特别是,如果您想将一组单词视为单个参数,请像平常一样对其进行引号,并且不要转义引号。考虑这个例子系统文档:

例子:

ExecStart=/bin/echo one ; /bin/echo "two two"

这将执行/bin/echo两次,每次都带有一个参数: onetwo two,分别。因为指定了两个命令,所以 Type=oneshot必须使用。

所以该ExecStart行应该是:

ExecStart=/usr/bin/tmux -S /tmp/rtorrent.sock new-session -d -s rtorrent 'rtorrent -n -O import=/etc/rtorrent.rc'

相关内容