Wie führe ich rTorrent als Systemd-Dienst unter einem dedizierten Benutzer aus?

Wie führe ich rTorrent als Systemd-Dienst unter einem dedizierten Benutzer aus?

Ich versuche, rtorrentes als auszuführen systemd service, aber der Dienst startet nicht. Hier ist die Konfigurationsdatei und alle Protokolle, die ich bekommen kann. Bitten Sie bei Bedarf um weitere Informationen. Ich verwende:

$ 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'.

Die Konfigurationsdatei..

[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

Noch ein paar Protokolle:

$ 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'.

Bisher habe ich den Benutzer rtzur admGruppe hinzugefügt, aber ich kann nicht herausfinden, warum tmuxer nicht als gestartet werden kann rt. Ich habe rtden Benutzer auch autorisiert, Dienste dank der Option „enable-linger“ zu starten: Ich habe den Benutzer loginctl enable-linger rt zuerst mit hinzugefügt : . Wie kann ich ihn als Dienst mit als dedizierter Benutzer ausführen? Oder gibt es eine andere Möglichkeit, ihn als Dienst mit auszuführen ? Jede Hilfe ist sehr willkommen.rtsudo adduser --system --gecos "rTorrent Client" --disabled-password --group --home /home/rt rtrtorrentsystemdtmuxsystemd

AKTUALISIEREN: Um also einen Neustart zu bekommen, habe ich einen neuen Benutzer rtorrentmit dem Namen erstellt: sudo adduser --system --gecos "rTorrent System Client" --disabled-password --group --home /home/rtorrent rtorrent und die /etc/systemd/system/rtorrent.serviceDatei folgendermaßen geändert (und auch system.daemon = truehinzugefügt /home/rtorrent/.rtorrent.rc,wegen diesem Beitrag):

[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

Aber schließlich erhalte ich diesen Fehler:

$ 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)

Warum passiert das? Was mache ich falsch?

UPDATE 2: Eine Sache noch,Dieser Beitragschlage vor, keine Dateien in abzulegen /etc/systemd/system/, sondern sie stattdessen in abzulegen, /usr/local/lib/systemd/systemwas in Debian-basierten Systemen in liegt /lib/systemd/system. Daher habe ich das dorthin verschoben und als ich es aktiviert habe, wurde automatisch ein in unit-fileerstellt . Aber ich erhalte immer noch diesen Fehler: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)

Antwort1

tmuxIch verstehe nicht, warum jemand ein um Ihr haben möchte rtorrent. Was ist die Funktion des tmuxhier? Sie könnten versuchenhttps://askubuntu.com/questions/802189/how-to-run-tmux-screen-with-systemd-230 wenn Sie diesen zusätzlichen Prozessaufwand unbedingt wünschen.

Wie auch immer, erstellen Sie eine /etc/systemd/system/rtorrent.servicemit

[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

Das sollte Ihre letzte Frage beantworten.

Antwort2

rtorrent als Daemon und screen/tmux

Ab rtorrent 0.9.7, Bildschirm / tmuxist nicht mehr erforderlichum rorrent als systemweiten Daemon auszuführenwenn Sie die Konsolenschnittstelle nicht benötigen. Bisher war dies zwingend erforderlich, da für die Steuerung von rTorrent ein aktives Terminal erforderlich war, selbst wenn Sie zur Verwaltung Ihres Torrents über SCGI nur eine externe Schnittstelle (z. B. ruTorrent) verwendet haben.

Wenn Sie rTorrent wirklich mit screen oder tmux ausführen möchten, um es über ein Terminal steuern zu können, lesen Siediese Antwort

Fügen Sie Ihrer rtorrent.rcDatei einfach die folgende Konfiguration hinzu, um rTorrent als Daemon auszuführen:

system.daemon.set = true

Dukann nur über eine externe Software gesteuert werdenüber SCGI, daher müssen Sie SCGI auch in der Konfigurationsdatei konfigurieren:

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

Notiz: Ihre Konfigurationsdatei enthält möglicherweise bereits eine scgi_port = ...Anweisung. Dies ist die ältere Methode zum Öffnen des SCGI-Ports und entspricht der obigen, aber fügen Sie nicht beide in Ihre Konfigurationsdatei ein, da rTorrent sonst eine Meldung ausgibt, dass der Port bereits geöffnet ist: Error in option file: <file>:<line>: SCGI already enabled..

Servicedatei

Die vorherige Antwort von Ljm Dullaart ist korrekt, was das Aussehen der Servicedatei betrifft. Sie müssen jedoch auf die verwendete rtorrent-Konfigurationsdatei achten.

Standardmäßig lädt rtorrent die ~/.rtorrent.rcDatei als Konfigurationsdatei. Wenn Sie sie auch mit der -o import ~/.rtorrent.rcOption in Ihrer Unit-Datei laden, lädt rtorrent die Dateizweimal. Dies führt dazu, dass rTorrent sich über den bereits geöffneten SCGI-Port beschwert, da es die network.scgi.open_portoder scgi_portKonfigurationszeilen zweimal liest. Sie sollten auch den -nOptionsschalter hinzufügen, um zu verhindern, dass rTorrent seine Standardkonfigurationsdatei liest

Die Unit-Datei /etc/systemd/system/rtorrent.servicesollte folgendermaßen aussehen:

[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

Antwort3

Das hat mir geholfen:

  1. Installieren Sie die Standardkonfiguration wie beschriebenHier. Diese Seite enthält ein Skript, das die Konfiguration herunterlädt und aktualisiert, um den aktuellen Benutzernamen zu verwenden.

    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. Entfernen Sie die Kommentarzeichen aus diesen 3 Zeilen in der Konfiguration:

    system.daemon.set = true
    network.scgi.open_local = (cat,(session.path),rpc.socket)
    execute.nothrow = chmod,770,(cat,(session.path),rpc.socket)
    
  3. Starten Sie den Dienst wie beschrieben indiese Antwort, aber geben Sie keinen -oParameter an.

    ExecStart=/usr/bin/rtorrent
    

    rtorrentruft die Konfiguration ~/.rtorrent.rcautomatisch ab.

Sie wissen, ob die Konfiguration zweimal geladen wurde, wenn in den Protokollen viele dieser Fehler angezeigt werden:

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

verwandte Informationen