Jackett 种子 Tracker API 部署一次讲清:三系统场景化落地指南
上周帮同事在 VPS 上部署 Jackett——一个把 Sonarr、Radarr 这类应用的查询翻译成各 Torrent Tracker 站点 HTTP 请求、再以标准 Torznab 格式返回结果的聚合 API——Linux 安装脚本刚走到生成 unit 文件那一步就报错停住:目录属主是 root,拒绝启动。说白了,Jackett 跨平台部署的难点不在代码本身,而在每个系统启动前都会做的那几道"权限/环境检查"。这篇文章不按平台逐个讲,而是按"首次拉起 → 挂成后台服务 → 日常运维排障"的真实落地顺序走一遍,三个操作系统的差异在每个环节里就地对比。
先花 30 秒判断你的机器该走哪条路
落到实际操作上,三条路径的入口完全不同:
- Windows:根目录双击
jackett_launcher.bat。这个脚本会先循环等待自动更新进程 JackettUpdater.exe 结束,再拉起托盘程序,所以启动慢几秒是正常的。 - Linux / macOS:解压后在终端直接执行 jackett_launcher.sh,脚本会用
--NoRestart参数启动 jackett 可执行文件,并在退出前等更新器收尾。如果本地还没有项目文件,先执行 git clone https://gitcode.com/GitHub_Trending/ja/Jackett 拿到它。
判断系统类型的逻辑封装在 Jackett.Common 的 EnvironmentUtil 工具类里,就一个属性在问运行时"你是不是 Windows";配套的 src/Jackett.Server/Program.cs 里还会拦截 Windows 专属参数(如 ReserveUrls),在其他平台传入会直接报错退出。所以别从 Windows 教程里照抄启动参数。
三条路径最终都指向同一个页面:浏览器打开http://localhost:9117,看到下面这张已配置 Indexer 列表,且每行 Test 打勾,首次拉起就算完成。
后台运行:三个系统各有一套服务注册方式
Linux 走 systemd。仓库根目录的 install_service_systemd.sh 按固定顺序做四件事:确认以 root 执行、停止旧有的 jackett.service、检查 Jackett 目录属主、向/etc/systemd/system/写入 unit 文件后再 reload、enable、start。生成的 unit 会用目录属主身份运行启动脚本,并配置Restart=always加 5 秒重启间隔——这就是"崩溃自动恢复"的来源。
sudo bash install_service_systemd.sh⚠️ 这里有个坑:如果目录属主是 root,脚本会在检查阶段直接退出并提示改属主。把它改成你的日常用户再重跑:
sudo chown -R $USER:$USER /path/to/JackettmacOS 走 launchd。install_service_macos 脚本会先卸载可能残留的旧 Agent,再向~/Library/LaunchAgents/写入org.user.Jackett.plist(开启 KeepAlive 和开机自启),最后 bootstrap 到用户 gui 域。别急着跑下一步——macOS 还有一层"隔离属性":浏览器下载的文件会被打上 quarantine 标记导致运行受阻,脚本会自动改写 jackett 可执行文件和所有 .dylib、.dll 上的 quarantine 位。如果加载失败,脚本会直接打印 launchctl 诊断输出,报 issue 时原样贴上去即可。
Windows 最省事:用 src/Jackett.Service/ 下的服务模块注册为系统服务,它本质上是在服务启动时拉起 JackettConsole.exe 控制台进程并监听其退出事件;在"服务"管理器里把 Jackett Service 设为自动启动即可。
端口被占或提示"already running"怎么排查
如果第二次启动时日志里出现"Address already in use: Most likely Jackett is already running",这不是新故障,而是上一个 Jackett 进程还占着端口。处理顺序三步:
- 先找残留进程——Linux 用
pgrep -f jackett,Windows 看任务管理器里的 JackettConsole/JackettTray,杀掉后重试; - 确要共存或端口固定冲突时再改端口:默认 9117 写在服务器配置的 Port 字段里(见 ServerConfig 默认值),可通过启动参数、配置页或应用数据目录下的 appsettings.json 修改;
- 改完必须重启进程或服务才生效,改配置不重启是最常见的"假失败"。
如果这一步卡住了,把启动命令换成前台模式跑一次,报错信息会比服务日志直白得多。
私有 Tracker 配不通:cookie 到底从哪拿
公开源加完就能 Test 通过,卡住你的多半是私有站点的 cookie 填写。正确姿势:登录 Tracker 站点后打开浏览器开发者工具,切到 Network 面板刷新页面,选中主页请求,在 Request Headers 里找到整串 Cookie 值复制出来,粘贴到 Jackett 对应 Indexer 的配置页。
粘贴后点该行 Test,变绿即可用。多 Tracker 聚合效果可以在 Manual Search 页验证:一个关键词同时打到多个已配置的 Indexer,结果按发布时间合并成一张表。
日常运维:更新、日志与重启各管什么
Jackett 内置更新器,两个平台的启动脚本(.bat 和 .sh)都设计成等更新器退出后才正式启动进程,升级期间不会出现半新半旧的二进制,不需要手动干预。日志统一由 Utils/Logging 下的组件写入应用数据目录,服务进程另有独立的 ServiceLog.txt。
定性地说:同等负载下 Linux 的资源占用相对最低、服务管理最完善,适合长期挂机;Windows 桌面体验最顺手;macOS 每次系统大版本升级后建议复查一次 Agent 状态。
看完就确认这三件事
✅ 现在就做,一条命令确认服务已拉起:
sudo systemctl status jackettWindows 用户改为打开"服务"管理器确认 Jackett Service 状态为"正在运行",macOS 用户执行launchctl list | grep Jackett。服务状态正常后,回浏览器刷新http://localhost:9117,挑一个刚加上的 Indexer 点一次 Test——绿勾出现,部署就算真正落地了。
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考