Linux

如何在專用使用者下將 rtorrent 作為 systemd 服務執行?

  • March 31, 2022

我正在嘗試以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由於 enable-linger 選項,我還授權使用者啟動服務:loginctl enable-linger rt 我首先添加了rt使用者:sudo adduser --system --gecos "rTorrent Client" --disabled-password --group --home /home/rt rt. 如何以專用使用者身份rtorrent執行systemd服務?tmux或者有沒有其他方法可以將它作為服務執行systemd?非常感謝任何幫助。

更新: 所以,為了重新開始,我創建了一個名為的新使用者rtorrentsudo adduser --system --gecos "rTorrent System Client" --disabled-password --group --home /home/rtorrent rtorrent 並將/etc/systemd/system/rtorrent.service文件更改為此(也添加system.daemon = truein /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: 還有一件事,這篇文章建議不要刪除. 因此,我將它移到了那裡,啟用它時,它會自動創建一個to 。但是,我仍然收到此錯誤:/etc/systemd/system/``/usr/local/lib/systemd/system``/lib/systemd/system``unit-file``symlink``/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)

rtorrent 作為守護程序和螢幕 / 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_port配置行兩次。您還應該添加-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

我不明白為什麼有人會想要一個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

那應該回答你的最後一個問題。

引用自:https://unix.stackexchange.com/questions/651591