Systemd com rtorrent no tmux

1

Não consegui obter o tmux & rtorrent rodando com um arquivo de serviço systemd. Meu rtorrent.service :

[Unit]
Description=rTorrent
Documentation=https://github.com/rakshasa/rtorrent
After=network.target local-fs.target

[Service]
Type=forking
KillMode=none
User=rtorrent
ExecStart=/usr/bin/tmux -S /tmp/rtorrent.sock new-session -d -s rtorrent \'rtorrent -n -O import=/etc/rtorrent.rc\'
ExecStop=/usr/bin/tmux -S /tmp/rtorrent.sock send-keys -t rtorrent C-q
WorkingDirectory=/home/rtorrent

[Install]
WantedBy=default.target

(Usar Type=oneshot com RemainAfterExit=yes não funcionou, e não estou convencido de que seja uma solução de qualquer forma. Acho que executar tmux desta maneira deve ser feito com Type=forking . Por favor, corrija-me se eu está errado!)

A saída de systemctl status rtorrent :

● rtorrent.service - rTorrent
   Loaded: loaded (/etc/systemd/system/rtorrent.service; disabled)
   Active: failed (Result: exit-code) since Mon 2015-04-27 10:48:37 AEST; 22s ago
     Docs: https://github.com/rakshasa/rtorrent
  Process: 4433 ExecStart=/usr/bin/tmux -S /tmp/rtorrent.sock new-session -d -s rtorrent 'rtorrent -n -O import=/etc/rtorrent/rtorrent.rc' (code=exited, status=1/FAILURE)

Apr 27 10:48:37 vagrant tmux[4433]: usage: new-session [-AdDP] [-c start-directory] [-F format] [-n window-name] [-s session-name] [-t target-session] [-x width] [-y height] [command]
Apr 27 10:48:37 vagrant systemd[1]: rtorrent.service: control process exited, code=exited status=1
Apr 27 10:48:37 vagrant systemd[1]: Failed to start rTorrent.
Apr 27 10:48:37 vagrant systemd[1]: Unit rtorrent.service entered failed state.

Mudar para o usuário rtorrent com su me permite testar o comando ExecStart manualmente - o que funciona bem. Eu estou perdido para depurar isso ainda mais.

Pensamentos? Obrigado!

    
por mafrosis 27.04.2015 / 03:19

1 resposta

3

O systemd faz sua própria interpretação dos valores de Exec e outras chaves. Portanto, você não deve escrever como se isso fosse passado para sh -c ou algo assim. Em particular, se você quiser tratar um conjunto de palavras como um único argumento, cite-o como faria normalmente e não escape das citações. Considere este exemplo de os documentos do systemd :

Example:

ExecStart=/bin/echo one ; /bin/echo "two two"

This will execute /bin/echo two times, each time with one argument: one and two two, respectively. Because two commands are specified, Type=oneshot must be used.

Portanto, a linha ExecStart deve ser:

ExecStart=/usr/bin/tmux -S /tmp/rtorrent.sock new-session -d -s rtorrent 'rtorrent -n -O import=/etc/rtorrent.rc'
    
por 27.04.2015 / 04:16

Tags