为什么要多开
一台服务器上只跑一个 qBittorrent,种子攒多了问题就来了:WebUI 越来越卡,单个进程到瓶颈后所有种子一起受影响,一个实例出问题还会全军覆没。把种子拆到多个独立实例里,每个实例有自己的进程、配置、下载目录和端口,负载和风险都分开,管理起来也更清楚。
手动多开本身不难,无非是复制 systemd 服务、给每个实例建独立 profile、再逐个改端口。但每换一台机器就要把这套流程重搓一遍,容易漏步骤、撞端口,所以我把它做成了脚本:more-qb。
more-qb 是什么
more-qb 是一个针对 [email protected] 的 qBittorrent 多实例脚本。它基于上游 RinehartZ/seedbox-tools 的 more_qb.sh 适配而来:保留上游的主体逻辑,只修改了原服务文件路径、服务名称和相关提示,适配我自己的服务命名。
适用环境
先说清楚,它不是通用的服务自动识别器,环境要对得上:
- 模板服务
/etc/systemd/system/[email protected]已存在 - 模板中设置了
User=shoo,原实例是[email protected] - 原配置在
/home/shoo/.config/qBittorrent/qBittorrent.conf
一行命令
在目标 Linux 服务器上以 root 执行,无需登录 GitHub:
wget -O more_qb.sh https://raw.githubusercontent.com/ihanr/more-qb/main/more_qb.sh && bash more_qb.sh -n 2 -w 9091 -b 23334
三个参数:
-n:新增实例的个数。示例里是 2,就是新增 qb2、qb3-w:起始 WebUI 端口。示例从 9091 开始,依次是 9091、9092-b:起始 BT 端口。示例从 23334 开始,依次是 23334、23335;SSL 端口自动按 BT 端口 +1000 算,即 24334、24335
不传参数时脚本的默认值是 -n 3 -w 8081 -b 23334,建议还是显式传参,自己心里有数。
执行完新增实例的情况:
| 实例 | WebUI 端口 | BT 端口 | SSL 端口 | 下载目录 |
|---|---|---|---|---|
| qb2 | 9091 | 23334 | 24334 | /home/shoo/Downloads/qb2 |
| qb3 | 9092 | 23335 | 24335 | /home/shoo/Downloads/qb3 |
原实例 [email protected] 保持原样,脚本最后会打印公网 IP 和各实例的访问地址、端口清单。
脚本做了什么
- 检查是否以 root 运行、模板服务文件是否存在,并从模板里读出
User=的用户名 - 复制模板生成
qb2.service、qb3.service:Type=forking改为Type=exec,ExecStart加上--profile=/home/shoo/qbN --confirm-legal-notice,每个实例一个独立 profile 目录 - 停掉原服务,
systemctl daemon-reload,逐个启动新服务生成初始配置,然后停下 - 把原实例的
qBittorrent.conf复制到各实例,并逐项改好:WebUI\Port、Session\Port(BT)、Session\SSL\Port、默认下载路径指向各自的Downloads/qbN、日志路径指向各自 profile 下的logs - 重新启动并 enable 原服务和所有新服务
注意事项
- 不要对已经有 qb2、qb3 的服务器重复运行。 上游逻辑会覆盖同名服务和实例配置,执行期间还会停止原服务
- 运行前确认 WebUI / BT 端口没有被占用,并先备份原配置
- 脚本要以 root 运行,执行前先把源码看一遍是个好习惯
- 语法检查不等于真实的 systemd / qBittorrent 运行验证,第一次用建议先在测试机上跑
项目地址
- GitHub:https://github.com/ihanr/more-qb
- 上游:https://github.com/RinehartZ/seedbox-tools
- License:MIT(Copyright © 2025 RinehartZ)