故障排除
无界面 Throne 的常见问题,从无法启动的单元到 TUN 冲突和被拒绝的 API 请求,以及 Bug 报告中应包含的内容。
首先以 Throne 的用户身份、使用相同的 --data-dir 运行 Throne --check 和 Throne --health(参见健康检查与日志),并阅读日志的最后几行。EXIT <code>: <reason> 这一行说明了 Throne 退出的原因;退出码解释了每个退出码。
常见问题
| 症状 | 原因与解决方法 |
|---|---|
单元立即失败,日志显示 refusing to run as root with /var/lib/throne |
其他用户可以写入数据目录。请运行 sudo chmod go-w /var/lib/throne /var/lib/throne/config。 |
退出码 3:… is in use by … |
另一个 Throne 占用了该数据目录:桌面版、用户单元或第二个服务。请停止另一个。 |
| 桌面版提示“Throne 正在后台运行”(Throne is running in the background)后退出 | 有一个无界面 Throne(通常是用户单元)在使用桌面版的数据目录。请运行 systemctl --user stop throne,或者用 thronectl 管理它。参见与桌面版 Throne 同时运行。 |
degraded: api_unavailable,并且日志显示 [API] Not listening on 127.0.0.1:9095 |
另一个程序占用了端口 9095。Throne 每 30 秒重试一次。--api-listen PORT 可以选择另一个端口。 |
--print-connection:The API key is not in a file |
数据目录的设置用自己的密钥开启了 API,就像桌面版那样。请把该密钥用作 THRONE_KEY(在桌面版中:Integration Settings → Throne API → Copy for scripts),或者用 --api-key-file 启动 Throne。 |
--health 或 --print-connection:No headless Throne answered |
请以 Throne 的用户身份、使用相同的 --data-dir 运行它。对于系统单元,请使用 sudo。 |
Windows:[Instance] Not talking to … access denied |
该服务的管道只供 Administrators 和 SYSTEM 使用。请在以管理员身份运行的命令行窗口中运行该命令,并加上 --data-dir C:\ProgramData\Throne。 |
thronectl:Throne closed the connection without a response |
密钥错误,或者你的地址在 5 次失败尝试后被拒绝 60 秒,例如由另一个使用旧密钥的客户端造成。请检查 THRONE_KEY_FILE,并等待一分钟。 |
thronectl:forbidden |
来自其他设备的管理请求。请用 --api-admin-lan 启动 Throne,或者在 Throne 所在的设备上运行该命令。 |
| thronectl:无法连接 | Throne 没有运行,或者 THRONE_ADDR 指向了别处。请检查 systemctl status throne 和 Throne --print-connection。 |
thronectl tun on:needs_privileges |
Throne 缺少 TUN 所需的权限。请运行 Throne --check,并参见 Linux 上的权限。 |
thronectl proxy on:system_proxy_unsupported |
无界面 Throne 没有系统代理。请让其他程序使用混合入站,或者使用 TUN。 |
tun_conflict:the Tun address 172.19.0.1 is already used by the network interface br-… |
Docker 网络(或其他网络)使用了 Throne 的 TUN 地址范围。请用 thronectl settings set tun_ipv4_cidr=172.29.0.1/24(任何没有被这台电脑上的网卡使用的范围都可以)把 TUN 移到空闲的范围,然后再次运行 thronectl tun on。或者为该 Docker 网络分配另一个子网。 |
tun_conflict:port 5533 on 127.0.0.1 (the core's DNS server, dns_in_port) is in use |
另一个程序占用了 DNS 端口。请用一个空闲端口运行 thronectl settings set dns_in_port=PORT,然后再次运行 thronectl tun on。 |
提到另一个 Throne 的 tun_conflict |
这台电脑上的另一个 Throne(例如桌面版 Throne)正在运行 TUN。同一时间只能有一个 Throne 运行 TUN。 |
配置档被拒绝:kill_switch_inactive |
Kill Switch 已开启,但无法工作。thronectl --json status 中的 kill_switch_error 和日志行 [Kill switch] Not active (<code>) 会说明原因:privilege、unsupported、config 或 overridden。thronectl settings set kill_switch=false 可以将其关闭。参见 Kill Switch。 |
degraded: resume_suppressed |
恢复的配置档在连续三次启动中都导致 Throne 或其核心停止。请修复该配置档,然后用 thronectl connect <id> 启动它。 |
degraded: core_gave_up |
核心反复失败。Throne 会保持运行,并每 5 分钟重试一次。日志中表示放弃的那一行末尾是核心的最后一个错误。 |
degraded: vpn_challenge_pending 或 vpn_auth_failed |
VPN 配置档需要无界面 Throne 无法提供的登录,或者其已保存的凭据被拒绝。请为该配置档关联一个用于一次性验证码的 OTP 条目,或者在桌面版 Throne 中修正凭据,然后用备份迁移过来。 |
previous_crash: true |
上一次运行没有正常结束。它的日志是数据目录中的 config/logs/crashed-<time>.log。 |
| Docker:发布的端口 2080 没有响应 | 入站监听的是 127.0.0.1。请运行 thronectl settings set inbound_address=0.0.0.0,然后重新启动配置档。 |
Docker:thronectl shutdown 之后容器又回来了 |
restart: unless-stopped 会在每次退出后启动它。请用 docker compose stop 停止它。 |
| macOS:Throne 每 10 秒启动一次又退出 | 这是 launchd 不断重试的配置错误。请阅读 /Library/Logs/Throne/throne.log。 |
| Windows:服务立即停止 | sc.exe query Throne 会把 Throne 的退出码显示为 SERVICE_EXIT_CODE。日志位于 C:\ProgramData\Throne\config\logs。退出码 78 通常表示数据文件夹有问题。 |
| Kill Switch 或 TUN 把你锁在外面 | 用 --no-resume --no-kill-switch 启动 Throne 一次。参见恢复访问。 |
Bug 报告中应包含的内容
如果问题仍然存在,请报告 Bug,并附上:
Throne --check的输出;Throne --health的输出;- Throne 的运行方式:软件包或镜像及其版本,以及服务管理器;
- 从启动到出现问题为止的日志,如果能复现问题,请使用
--debug。如果是崩溃,还请附上config/logs/crashed-<time>.log。
发布之前,请删除其中的服务器地址、订阅 URL 和密钥。切勿发布 api.key。