如何在专用用户下将 rtorrent 作为 systemd 服务运行?

如何在专用用户下将 rtorrent 作为 systemd 服务运行?

我试图rtorrent以 运行systemd service,但服务无法启动。这是配置文件和我可以获得的任何日志。如果需要,请询问更多信息。我在跑步:

$ lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description:    Ubuntu 20.04.2 LTS
Release:        20.04
Codename:       focal
$ systemctl status rtorrent
● rtorrent.service - rTorrent
     Loaded: loaded (/etc/systemd/system/rtorrent.service; enabled; vendor preset: enabled)
     Active: failed (Result: exit-code) since Thu 2021-05-27 08:52:43 EEST; 5min ago
    Process: 20199 ExecStart=/usr/bin/tmux new-session -d -P -s rt -n rtorrent /usr/bin/rtorrent (code=exited, status=0/SUCCESS)
    Process: 20205 ExecStop=/usr/bin/tmux send-keys -t rt:rtorrent C-q (code=exited, status=1/FAILURE)
   Main PID: 20201 (code=exited, status=0/SUCCESS)

May 27 08:52:43 $MACHINE systemd[1]: Starting rTorrent...
May 27 08:52:43 $MACHINE tmux[20199]: rt:
May 27 08:52:43 $MACHINE systemd[1]: Started rTorrent.
May 27 08:52:43 $MACHINE tmux[20205]: no server running on /tmp/tmux-110/default
May 27 08:52:43 $MACHINE systemd[1]: rtorrent.service: Control process exited, code=exited, status=1/FAILURE
May 27 08:52:43 $MACHINE systemd[1]: rtorrent.service: Failed with result 'exit-code'.

配置文件..

[Unit]
Description=rTorrent
Requires=network.target local-fs.target

[Service]
Type=forking
KillMode=none
User=rt
Group=adm
ExecStart=/usr/bin/tmux new-session -d -P -s rt -n rtorrent /usr/bin/rtorrent
ExecStop=/usr/bin/tmux send-keys -t rt:rtorrent C-q
WorkingDirectory=/tmp/tmux-110/

[Install]
WantedBy=multi-user.target

更多日志:

$ journalctl -u rtorrent
May 27 08:52:43 $MACHINE systemd[1]: Starting rTorrent...
May 27 08:52:43 $MACHINE tmux[20199]: rt:
May 27 08:52:43 $MACHINE systemd[1]: Started rTorrent.
May 27 08:52:43 $MACHINE tmux[20205]: no server running on /tmp/tmux-110/default
May 27 08:52:43 $MACHINE systemd[1]: rtorrent.service: Control process exited, code=exited, status=1/FAILURE
May 27 08:52:43 $MACHINE systemd[1]: rtorrent.service: Failed with result 'exit-code'.

到目前为止,我已将用户添加rtadm组中,但我不明白为什么tmux不能以rt.rt由于启用-linger选项,我还授权用户启动服务:loginctl enable-linger rt 我首先使用rt以下命令添加用户:sudo adduser --system --gecos "rTorrent Client" --disabled-password --group --home /home/rt rt。如何以专用用户身份rtorrent运行systemd服务?tmux或者还有其他方法可以将其作为服务运行吗systemd?非常感谢任何帮助。

更新: 因此,为了重新开始,我创建了一个名为rtorrent:的新用户sudo adduser --system --gecos "rTorrent System Client" --disabled-password --group --home /home/rtorrent rtorrent 并将/etc/systemd/system/rtorrent.service文件更改为此(还添加system.daemon = true/home/rtorrent/.rtorrent.rc因为这个帖子):

[Unit]
Description=rTorrent System Daemon
After=network.target

[Service]
Type=simple
User=rtorrent
Group=rtorrent

ExecStartPre=-/bin/rm -f /home/rtorrent/.session/rtorrent.lock
ExecStart=/usr/bin/rtorrent -o import=/home/rtorrent/.rtorrent.rc
Restart=on-failure
RestartSec=3

[Install]
WantedBy=multi-user.target

但毕竟我得到了这个错误:

$ systemctl status rtorrent
● rtorrent.service - rTorrent System Daemon
     Loaded: loaded (/etc/systemd/system/rtorrent.service; enabled; vendor preset: enabled)
     Active: activating (auto-restart) (Result: exit-code) since Thu 2021-05-27 10:12:26 EEST; 2s ago
    Process: 22855 ExecStartPre=/bin/rm -f /home/rtorrent/.session/rtorrent.lock (code=exited, status=0/SUCCESS)
    Process: 22856 ExecStart=/usr/bin/rtorrent -o import=/home/rtorrent/.rtorrent.rc (code=exited, status=255/EXCEPTION)
   Main PID: 22856 (code=exited, status=255/EXCEPTION)

为什么会发生这种情况?我做错了什么?

更新2: 还有一件事,这个帖子建议不要将任何文件放在 中/etc/systemd/system/,而是将它们放在/usr/local/lib/systemd/system基于 Debian 的系统中的/lib/systemd/system.因此,我将 移到unit-file那里,并在启用它时,它自动创建了一个symlinkto /etc/systemd/system/。但是,我仍然收到此错误:

$ sudo systemctl status rtorrent
● rtorrent.service - rTorrent System Daemon
     Loaded: loaded (/lib/systemd/system/rtorrent.service; enabled; vendor preset: enabled)
     Active: activating (auto-restart) (Result: exit-code) since Thu 2021-05-27 10:39:14 EEST; 924ms ago
    Process: 24530 ExecStartPre=/bin/rm -f /home/rtorrent/.session/rtorrent.lock (code=exited, status=0/SUCCESS)
    Process: 24531 ExecStart=/usr/bin/rtorrent -o import=/home/rtorrent/.rtorrent.rc (code=exited, status=255/EXCEPTION)
   Main PID: 24531 (code=exited, status=255/EXCEPTION)

答案1

我不明白为什么有人会想要一个tmux围绕着你的rtorrent。其功能是什么tmux?你可以尝试https://askubuntu.com/questions/802189/how-to-run-tmux-screen-with-systemd-230 如果你绝对想要额外的进程开销。

无论如何,创建/etc/systemd/system/rtorrent.service一个

[Unit]
Description=rTorrent System Daemon
After=network.target

[Service]
Type=simple
User=rtorrent
Group=rtorrent

ExecStartPre=-/bin/rm -f /home/rt/.session/rtorrent.lock
ExecStart=/usr/bin/rtorrent -o import=/home/rt/rtorrent.rc
Restart=on-failure
RestartSec=3

[Install]
WantedBy=multi-user.target

这应该回答你的最后一个问题。

答案2

rtorrent 作为守护进程和 screen / tmux

从 rtorrent 0.9.7 开始,screen / tmux不再需要将 rtorrent 作为系统范围的守护进程运行如果你不需要它的控制台界面。以前这是强制性的,因为 rtorrent 需要控制活动终端,即使您仅使用外部接口(例如 ruTorrent)通过 SCGI 管理您的 torrent。

如果您确实想使用 screen 或 tmux 运行 rtorrent 以便能够使用终端控制它,请参阅这个答案

只需将以下配置添加到您的rtorrent.rc文件中即可将 rtorrent 作为守护进程运行:

system.daemon.set = true

只能使用外部软件来控制它通过 SCGI,因此您还必须在配置文件中配置 SCGI:

# Bind SCGI to localhost only on port 5000
network.scgi.open_port = 127.0.0.1:5000

笔记:您的配置文件可能已经包含scgi_port = ...指令。这是打开 SCGI 端口的旧方法,与上面的方法等效,但不要将它们都放在配置文件中,否则 rtorrent 会抱怨端口已打开:Error in option file: <file>:<line>: SCGI already enabled.

服务档案

Ljm Dullaart 之前的回答关于服务文件的外观是正确的。但您必须注意使用中的 rtorrent 配置文件。

默认情况下,rtorrent 会加载该~/.rtorrent.rc文件作为其配置文件。如果您还使用-o import ~/.rtorrent.rc单元文件中的选项加载它,它将使 rtorrent 加载该文件两次。它会导致 rtorrent 抱怨 SCGI 端口已打开,因为它读取了network.scgi.open_portscgi_portconfig 行两次。您还应该添加选项-n开关以防止 rtorrent 读取其默认配置文件

单元文件/etc/systemd/system/rtorrent.service应如下所示:

[Unit]
Description=rTorrent system daemon
After=network.target

[Service]
Type=simple
User=torrent
Group=torrent

# Change these settings to match your install:
Environment=RTORRENT_DIR=/home/torrent
Environment=RTORRENT_CONFIG=${RTORRENT_DIR}/.rtorrent.rc
Environment=SESSION_DIR=${RTORRENT_DIR}/session

ExecStartPre=/bin/rm -f ${SESSION_DIR}/rtorrent.lock
ExecStart=/usr/bin/rtorrent -n -o import=${RTORRENT_CONFIG}

Restart=on-failure
RestartSec=3

[Install]
WantedBy=multi-user.target

答案3

这对我有帮助:

  1. 按照描述安装默认配置这里。该页面包含下载和更新配置以使用当前用户名的脚本。

    curl -Ls "https://raw.githubusercontent.com/wiki/rakshasa/rtorrent/CONFIG-Template.md" \
        | sed -ne "/^######/,/^### END/p" \
        | sed -re "s:/home/USERNAME:$HOME:" >~/.rtorrent.rc
    mkdir -p ~/rtorrent/
    
  2. 在 config 中取消注释这 3 行:

    system.daemon.set = true
    network.scgi.open_local = (cat,(session.path),rpc.socket)
    execute.nothrow = chmod,770,(cat,(session.path),rpc.socket)
    
  3. 按照中所述启动服务这个答案,但不指定-o参数。

    ExecStart=/usr/bin/rtorrent
    

    rtorrent自动从中获取配置~/.rtorrent.rc

如果您在日志中看到大量这些错误,您就会知道配置是否加载了两次:

1687310792 C Caught exception: 'Error in option file: ~/.rtorrent.rc:11: Invalid key.'.

相关内容