전용 사용자로 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이유를 알 수 없습니다 . 또한 활성화-링거 옵션 덕분에 사용자에게 서비스를 시작할 수 있는 권한을 부여했습니다 . 먼저 다음을 사용하여 사용자를 추가했습니다 . 전용 사용자 로 서비스를 실행 하는 방법은 무엇입니까 ? 아니면 서비스로 실행하는 다른 방법이 있습니까 ? 어떤 도움이라도 정말 감사하겠습니다.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.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/systemDebian 기반 시스템에 있는 파일을 삭제하는 것이 좋습니다 /lib/systemd/system. 그래서 unit-file그곳으로 이동했고, 활성화하면 자동으로 to 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

데몬 및 화면/tmux로서의 rtorrent

rtorrent 0.9.7부터, screen / tmux더 이상 필요하지 않습니다rtorrent를 시스템 전체 데몬으로 실행하려면콘솔 인터페이스가 필요하지 않은 경우. SCGI를 통해 토렌트를 관리하기 위해 외부 인터페이스(예: ruTorrent)만 사용한 경우에도 rtorrent를 제어하려면 활성 터미널이 필요했기 때문에 이전에는 필수였습니다.

터미널을 사용하여 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.rcrtorrent가 파일을 로드하게 됩니다.두 배. 이는 network.scgi.open_port또는 구성 라인을 두 번 읽기 때문에 이미 열려 있는 SCGI 포트에 대해 불평하는 rtorrent에 대한 결과입니다 scgi_port. 또한 -nrtorrent가 기본 구성 파일을 읽지 못하도록 옵션 스위치를 추가해야 합니다.

유닛 파일은 /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.

로그에 다음과 같은 오류가 많이 표시되면 구성이 두 번 로드되었는지 알 수 있습니다.

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

관련 정보