専用ユーザーの下で 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'.

これまで、ユーザーをグループrtに追加しましたが、として起動できないadm理由がわかりません。また、enable-linger オプションを使用して、ユーザーにサービスを起動する権限を与えました。 最初に、次のユーザーを追加しました。専用ユーザーとしてをサービスとして実行するにはどうすればよいですか? または、 でサービスとして実行する他の方法はありますか? どのような助けでも本当にありがたいです。tmuxrtrtloginctl enable-linger rtrtsudo adduser --system --gecos "rTorrent Client" --disabled-password --group --home /home/rt rtrtorrentsystemdtmuxsystemd

アップデート:rtorrentそこで、新たなスタートを切るために、次の名前で 新しいユーザーを作成し、ファイルを次のようにsudo adduser --system --gecos "rTorrent System Client" --disabled-password --group --home /home/rtorrent rtorrent 変更しました( 、/etc/systemd/system/rtorrent.servicesystem.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/systemDebian ベースのシステムでは にあるにドロップすることを提案します/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)

答え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をシステム全体のデーモンとして実行するコンソールインターフェースが必要ない場合以前は、SCGI 経由でトレントを管理するために外部インターフェイス (ruTorrent など) のみを使用した場合でも、rtorrent ではアクティブな端末を制御する必要があったため、これが必須でした。

本当にscreenやtmuxを使ってrtorrentを実行し、ターミナルを使って制御したい場合は、この答え

rtorrent.rcrtorrent をデーモンとして実行するには、ファイルに次の設定を追加するだけです。

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はファイルをロードします。2回network.scgi.open_port. rtorrent は、または config行を 2 回読み取るため、SCGI ポートがすでに開いているというエラーを出力します。rtorrentがデフォルトの config ファイルを読み取らないようにするには、オプション スイッチscgi_portも追加する必要があります。-n

ユニット ファイルは/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

ログに次のエラーが多数表示されている場合、構成が 2 回ロードされたかどうかがわかります。

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

関連情報