qBittorrent跟随系统开机启动但无法匹配到IPv6用户的问题解决
前言
本文根据chatgpt的答案进行整理发布。
问题描述
在无头debian系统上装了qbittorrent-nox并设置了开机启动,启动脚本如下:
[Unit]
Description=qBittorrent-nox service for user %I
Documentation=man:qbittorrent-nox(1)
Wants=network-online.target
After=local-fs.target network-online.target nss-lookup.target
[Service]
Type=simple
PrivateTmp=false
User=%i
ExecStart=/usr/bin/qbittorrent-nox
TimeoutStopSec=1800
[Install]
WantedBy=multi-user.target
在防火墙中也放行了ipv6的端口(有ipv6的公网地址)。
[ 6] 12345 (v6) ALLOW IN Anywhere (v6)
但发现在系统重启之后,qbit中的下载任务无法匹配到ipv6的用户,如果此时手动重启qbit,下载任务就可以立即匹配到ipv6用户。
初步判断是系统重启之后,在获取到网络
和获取到ipv6公网地址
之间存在一个时间差,但qbit在这个时间差中间启动了,导致qbit无法获取到ipv6公网地址。
问题解决
方法一:修改qbit的systemd启动脚本,增加对host是否获取到ipv6公网地址的判断逻辑
首先用ip addr
命令获取系统网卡设备的名称
然后在qbit的启动脚本中添加一段ExecStartPre
代码,其它部分不需要修改。
[Unit]
Description=qBittorrent-nox service for user %I
Documentation=man:qbittorrent-nox(1)
Wants=network-online.target
After=local-fs.target network-online.target nss-lookup.target
[Service]
ExecStartPre=/bin/bash -c 'until ip -6 addr show dev enp6s18 | grep "inet6 .*global"; do sleep 1; done'
Type=simple
PrivateTmp=false
User=%i
ExecStart=/usr/bin/qbittorrent-nox
TimeoutStopSec=1800
[Install]
WantedBy=multi-user.target
参数释疑:
ExecStartPre=/bin/bash -c 'until ip -6 addr show dev enp6s18 | grep "inet6 .*global"; do sleep 1; done'
:在服务启动之前,这行命令会持续检查你的网络接口(此处假设接口是 enp6s18)是否已经获取了一个有效的 IPv6 公网地址。直到获取到全局 IPv6 地址,服务才会继续启动。ip -6 addr show dev enp6s18
:列出 enp6s18 接口的所有 IPv6 地址。grep "inet6 .*global"
:确保找到全局 IPv6 地址。
修改之后保存,然后重新加载服务让配置生效
sudo systemctl daemon-reload
sudo systemctl restart qbittorrent-nox@user.service
方法二:设置qbit延迟启动
依然是编辑qbit的启动脚本,非常简单暴力的设置延迟30s启动。
[Unit]
Description=qBittorrent-nox service for user %I
Documentation=man:qbittorrent-nox(1)
Wants=network-online.target
After=local-fs.target network-online.target nss-lookup.target
[Service]
ExecStartPre=/bin/sleep 30
Type=simple
PrivateTmp=false
User=%i
ExecStart=/usr/bin/qbittorrent-nox
TimeoutStopSec=1800
[Install]
WantedBy=multi-user.target
修改之后保存,然后重新加载服务让配置生效
sudo systemctl daemon-reload
sudo systemctl restart qbittorrent-nox@user.service
Tips:我用的方法二,实测解决了问题,缺点就是每次重启系统或者手动重启qbit服务都要等30s。
🎉