如何让 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
以本地用户身份运行。当它工作时,您可以替换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
更改文件后,您必须运行。在上面的示例中,我~/.rtorrent.pid
在启动 rtorrent 之前将其 PID 保存在 中。要停止应用程序,我将SIGTERM
(15) 发送到 rTorrent(使用 中的 PID ~/.rtorrent.pid
)并等待进程停止。