Como executar o rtorrent como serviço systemd sob um usuário dedicado?

Como executar o rtorrent como serviço systemd sob um usuário dedicado?

Estou tentando executar rtorrentcomo um systemd service, mas o serviço não inicia. Aqui está o arquivo de configuração e qualquer log que eu puder obter. Peça mais informações se precisar. Eu estou correndo:

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

O arquivo de configuração..

[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

Mais alguns registros:

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

Até agora adicionei o usuário rtao admgrupo, mas não consigo entender por que tmuxnão pode ser iniciado como rt. Também autorizei rto usuário a iniciar serviços graças à opção enable-linger: loginctl enable-linger rt primeiro adicionei o rtusuário com: sudo adduser --system --gecos "rTorrent Client" --disabled-password --group --home /home/rt rt. Como fazer rtorrentfuncionar como systemdserviço tmuxcomo usuário dedicado? Ou existe alguma outra maneira de executá-lo como serviço systemd? Qualquer ajuda é muito apreciada.

ATUALIZAR: Então, apenas para começar do zero, criei um novo usuário chamado rtorrent: sudo adduser --system --gecos "rTorrent System Client" --disabled-password --group --home /home/rtorrent rtorrent e alterei o /etc/systemd/system/rtorrent.servicearquivo para este (adicionando system.daemon = truetambém /home/rtorrent/.rtorrent.rc,por causa dessa postagem):

[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

Mas afinal recebo este erro:

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

Por que isso está acontecendo? O que estou fazendo errado?

ATUALIZAÇÃO 2: Mais uma coisa,Esta postagemsugiro não descartar nenhum arquivo no /etc/systemd/system/, mas em vez disso, soltá-los em /usr/local/lib/systemd/systemsistemas baseados em Debian /lib/systemd/system. Portanto, mudei o unit-filelá e ao habilitá-lo, ele criou automaticamente um symlinkto /etc/systemd/system/. Mas ainda assim, recebo este erro:

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

Responder1

Eu não entendo por que alguém iria querer um tmuxarquivo rtorrent. Qual é a função do tmuxaqui? Você poderia tentarhttps://askubuntu.com/questions/802189/how-to-run-tmux-screen-with-systemd-230 se você realmente deseja essa sobrecarga extra do processo.

De qualquer forma, crie um /etc/systemd/system/rtorrent.servicewith

[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

Isso deve responder à sua última pergunta.

Responder2

rtorrent como daemon e screen/tmux

A partir do rtorrent 0.9.7, tela/tmuxnão é mais necessáriopara executar o rtorrent como um daemon de todo o sistemase você não precisa da interface do console. Anteriormente era obrigatório porque o rtorrent exigia um terminal ativo para ser controlado, mesmo se você usasse apenas uma interface externa (por exemplo, ruTorrent) para gerenciar seu torrent via SCGI.

Se você realmente deseja executar o rtorrent usando screen ou tmux para poder controlá-lo usando um terminal, consulteesta resposta

Basta adicionar a seguinte configuração ao seu rtorrent.rcarquivo para executar o rtorrent como um daemon:

system.daemon.set = true

Vocêsó será capaz de controlá-lo usando um software externovia SCGI, então você também deve configurar o SCGI no arquivo de configuração:

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

Observação: seu arquivo de configuração já pode incluir uma scgi_port = ...diretiva. É a forma mais antiga de abrir a porta SCGI e é equivalente à anterior, mas não coloque os dois no seu arquivo de configuração ou o rtorrent reclamará que a porta já está aberta: Error in option file: <file>:<line>: SCGI already enabled..

Arquivo de serviço

A resposta anterior de Ljm Dullaart está correta sobre a aparência do arquivo de serviço. Mas você deve prestar atenção ao arquivo de configuração do rtorrent em uso.

Por padrão, o rtorrent carregará o ~/.rtorrent.rcarquivo como seu arquivo de configuração. Se você também carregá-lo usando a -o import ~/.rtorrent.rcopção em seu arquivo de unidade, fará com que o rtorrent carregue o arquivoduas vezes. O resultado é que o rtorrent reclama da porta SCGI já aberta, pois lê as linhas network.scgi.open_portor config duas vezes. scgi_portVocê também deve adicionar a -nopção para evitar que o rtorrent leia seu arquivo de configuração padrão

O arquivo da unidade /etc/systemd/system/rtorrent.servicedeve ser semelhante a:

[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

Responder3

Isto é o que me ajudou:

  1. Instale a configuração padrão conforme descritoaqui. Essa página contém um script que baixa e atualiza a configuração para usar o nome de usuário atual.

    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. Remova o comentário destas 3 linhas em config :

    system.daemon.set = true
    network.scgi.open_local = (cat,(session.path),rpc.socket)
    execute.nothrow = chmod,770,(cat,(session.path),rpc.socket)
    
  3. Inicie o serviço conforme descrito emesta resposta, mas não especifique -oo parâmetro.

    ExecStart=/usr/bin/rtorrent
    

    rtorrentpega a configuração ~/.rtorrent.rcautomaticamente.

Você saberá se a configuração foi carregada duas vezes se vir muitos destes erros nos logs:

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

informação relacionada