Как заставить rtorrent запускаться после перезагрузки?

Я пытался бежать

systemctl reenable rtorrent

и перезагрузите компьютер, но нет запущенного процесса.

Я могу запустить его, используя следующую экранную команду:

screen -d -m -S rtorrent rtorrent

Вот мои зависимости

systemctl list-dependencies rtorrent
rtorrent.service
● ├─system.slice
● └─basic.target
●   ├─paths.target
●   │ └─acpid.path
●   ├─slices.target
●   │ ├─-.slice
●   │ └─system.slice
●   ├─sockets.target
●   │ ├─acpid.socket
●   │ ├─avahi-daemon.socket
●   │ ├─dbus.socket
●   │ ├─docker.socket
●   │ ├─systemd-initctl.socket
●   │ ├─systemd-journald-dev-log.socket
●   │ ├─systemd-journald.socket
●   │ ├─systemd-shutdownd.socket
●   │ ├─systemd-udevd-control.socket
●   │ └─systemd-udevd-kernel.socket
●   ├─sysinit.target
●   │ ├─debian-fixup.service
●   │ ├─dev-hugepages.mount
●   │ ├─dev-mqueue.mount
●   │ ├─kmod-static-nodes.service
●   │ ├─networking.service
●   │ ├─plymouth-read-write.service
●   │ ├─plymouth-start.service
●   │ ├─proc-sys-fs-binfmt_misc.automount
●   │ ├─sys-fs-fuse-connections.mount
●   │ ├─sys-kernel-config.mount
●   │ ├─sys-kernel-debug.mount
●   │ ├─systemd-ask-password-console.path
●   │ ├─systemd-binfmt.service
●   │ ├─systemd-journal-flush.service
●   │ ├─systemd-journald.service
●   │ ├─systemd-modules-load.service
●   │ ├─systemd-random-seed.service
●   │ ├─systemd-sysctl.service
●   │ ├─systemd-tmpfiles-setup-dev.service
●   │ ├─systemd-tmpfiles-setup.service
●   │ ├─systemd-udev-trigger.service
●   │ ├─systemd-udevd.service
●   │ ├─systemd-update-utmp.service
●   │ ├─udev-finish.service
●   │ ├─cryptsetup.target
●   │ ├─local-fs.target
●   │ │ ├─-.mount
●   │ │ ├─boot.mount
●   │ │ ├─systemd-fsck-root.service
●   │ │ └─systemd-remount-fs.service
●   │ └─swap.target
●   │   ├─dev-disk-by\x2duuid-a2ba1307\x2dc5ae\x2d4e84\x2d87d9\x2dca704d4103fe.swap
●   │   └─dev-disk-by\x2duuid-a2ba1307\x2dc5ae\x2d4e84\x2d87d9\x2dca704d4103fe.swap
●   └─timers.target
●     └─systemd-tmpfiles-clean.timer

Я использую Debian GNU/Linux 8.7 (Джесси)

which rtorrent
/usr/local/bin/rtorrent

Я отредактировал /etc/systemd/user/rt.service для этого:

[Unit]
Description=rTorrent
After=network.target

[Service]
Type=forking
KillMode=none
ExecStart=/usr/bin/screen -d -m -fa -S rtorrent /usr/local/bin/rtorrent
ExecStop=/usr/bin/killall -w -s 2 /usr/local/bin/rtorrent
WorkingDirectory=%h

[Install]
WantedBy=default.target

Когда я тогда запускаю эту команду и получаю ошибку.

systemctl --user start rt
Failed to get D-Bus connection: Connection refused

libpam-systemd установлен:

apt-get install libpam-systemd
Reading package lists... Done
Building dependency tree
Reading state information... Done
libpam-systemd is already the newest version.
0 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.

и я перезагрузил машину

uptime
18:26:03 up 5 min,  1 user,  load average: 0.06, 0.22, 0.13

2 ответа2

0

Я ничего не знаю о rTorrent, но согласно информации, предоставленной вашим вопросом, вы сможете создать сервис для Systemd. Я проверил его на моей системе (Arch Linux), и он работал.

Сначала вы должны создать файл *.service . Я добавил пример для такого файла ниже. Где создать этот файл зависит от ваших потребностей. Если вы хотите запустить rTorrent при загрузке, вы должны создать файл в /etc/systemd/system/ . Если вы хотите запустить rTorrent при входе в систему, вы должны создать его в /etc/systemd/user/ (для каждого пользователя) или ~/.config/systemd/user/ (только для вас).

После создания этого файла вы сможете его запустить. Я предполагаю, что вы назвали файл rtorrent.service , поэтому служба называется rtorrent . Если вы сохранили файл в /etc/systemd/system/ , вы можете запустить приложение, выполнив

# systemctl start rtorrent

как корень. Если вы сохранили его в /etc/systemd/user/ или ~/.config/systemd/user/ , вам нужно позвонить

$ systemctl --user start rtorrent

как локальный пользователь. Когда он работает, вы можете заменить start на enable чтобы приложение запускалось при перезагрузке / входе в систему.

Согласно этому сообщению на форуме, вы должны установить libpam-systemd прежде чем сможете использовать пользовательские сервисы в Debian. Вам также может понадобиться перезагрузить вашу систему.


Я думаю, что ваш служебный файл должен в основном выглядеть как мой пример ниже. Вы должны удалить User=... если вы создали службу пользователя.

[Unit]
Description=rTorrent
After=network.target auditd.service

[Service]
Type=forking
ExecStart=/usr/bin/screen -dmS rtorrent /bin/bash -c \
    'echo "$$$$" > %h/.rtorrent.pid && exec /usr/local/bin/rtorrent'

ExecStop=/bin/bash -c '/bin/kill -15 "$$(cat %h/.rtorrent.pid)"'
ExecStop=/bin/bash -c 'while /bin/kill -0 "$$(cat %h/.rtorrent.pid)"; do /bin/sleep 0.1; done'
ExecStopPost=bin/rm %h/.rtorrent.pid

Restart=on-failure
User=<insert some username here>
WorkingDirectory=~

[Install]
WantedBy=multi-user.target

Вы должны запустить systemctl [--user] daemon-reload после изменения файла. В моем примере выше я сохраняю PID rtorrent в ~/.rtorrent.pid перед его запуском. Чтобы остановить приложение, я отправляю SIGTERM (15) в rTorrent (используя PID из ~/.rtorrent.pid) и жду, пока процесс остановится.

0

В пакете Debian нет файла systemd service/unit для rtorrent. Вам нужно создать свой собственный файл модуля. Вы можете найти примеры здесь: https://wiki.archlinux.org/index.php/RTorrent#Additional_tips

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .