重启时启动 rtorrent

重启时启动 rtorrent

如何让 rtorrent 在重启后启动?

我试着跑

systemctl reenable rtorrent

并重新启动机器,但没有运行 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 (jessie)

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

答案1

Debian 软件包中没有 rtorrent 的 systemd 服务/单元文件。您需要创建自己的单元文件。您可以在此处找到示例:https://wiki.archlinux.org/index.php/RTorrent#Additional_tips

答案2

我不知道rTorrent但根据你的问题提供的信息,你应该能够创建一个服务系统化。我在我的系统上测试了它(Arch Linux),并且它确实起作用了。

首先,您必须创建一个*.service文件。我已在下面添加了此类文件的示例。在何处创建此文件取决于您的需求。如果您想在启动时启动 rTorrent,则应在 下创建文件/etc/systemd/system/。如果您想在登录时启动 rTorrent,则应在/etc/systemd/user/(针对每个用户)或~/.config/systemd/user/(仅针对您)中创建它。

创建此文件后,您应该能够启动它。我假设您已将文件命名为rtorrent.service,因此服务名为rtorrent。如果您已将文件保存在下/etc/systemd/system/,则可以通过执行来启动应用程序

# systemctl start rtorrent

以 root 身份。如果您已将其保存在/etc/systemd/user/或中~/.config/systemd/user/,则必须调用

$ systemctl --user start rtorrent

以本地用户身份运行。当它工作时,您可以替换startenable让应用程序在重启/登录时启动。

根据论坛帖子,您必须先安装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更改文件后,您必须运行。在上面的示例中,我~/.rtorrent.pid在启动 rtorrent 之前将其 PID 保存在 中。要停止应用程序,我将SIGTERM(15) 发送到 rTorrent(使用 中的 PID ~/.rtorrent.pid)并等待进程停止。

相关内容