Как запустить 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группу, но не могу понять, почему 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? Любая помощь действительно ценится.

ОБНОВЛЯТЬ: Итак, чтобы просто начать все заново, я создал нового пользователя с именем rtorrentwith: 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туда и при его включении он автоматически создал 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 как демон и экран / tmux

Начиная с rtorrent 0.9.7, screen / tmuxбольше не требуетсязапустить rtorrent как общесистемный демонесли вам не нужен его консольный интерфейс. Раньше это было обязательным, поскольку rtorrent требовал активного терминала для управления, даже если вы использовали только внешний интерфейс (например, ruTorrent) для управления торрентом через SCGI.

Если вы действительно хотите запустить rtorrent с помощью screen или tmux, чтобы иметь возможность управлять им с помощью терминала, см.этот ответ

Просто добавьте следующую конфигурацию в свой 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опции в вашем файле unit, это заставит rtorrent загрузить файлдважды. Это приводит к тому, что rtorrent жалуется на то, что порт SCGI уже открыт, поскольку он дважды читает строки конфигурации network.scgi.open_portили . Вам также следует добавить переключатель параметров, чтобы запретить rtorrent читать свой файл конфигурации по умолчанию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. Раскомментируйте эти 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.'.

Связанный контент