
功能定位:为什么要在Linux端做“订阅节点开机自启”
把“快连Linux端如何配置订阅节点开机自启”拆成两个动作:宿主机一上电就拉取最新订阅,并在 Network-online.target 阶段自动连入最优节点,省去每次重启后 1~2 分钟的手动点开。无人值守的海外直播推流机、CI/CD Runner、远程 NAS 下载盒最常靠它续命。
快连在 v8.3.0 把 CLI 独立打包成 qlcli,首次支持 headless 订阅刷新与协议热切换,systemd 托管才成为可能;旧版仅 GUI,无法彻底后台化。若你仍停留在 2025 及更早的 deb/rpm,先升到“截至当前的最新版本”,否则后续路径会完全对不上。
方案对比:systemd、crontab 与 rc.local 的取舍
systemd:与网络栈生命周期同步
优点是可依赖 Network-online.target,确保拉取订阅时 DNS 已就绪;同时支持 Restart=on-failure,断网恢复后自动重试。缺点需写两次文件(service+timer 或双 service),新手嫌“啰嗦”,但换来的是可观测、可回退、可调试。
crontab@reboot:写一条就能跑
适合“单用户笔记本”;cron 不等待网络,大概率“qlcli 拉取失败→进程退出→无人值守失败”。若坚持用 cron,得在脚本里循环检测网络,直到 curl 返回 200 才继续。
rc.local:兼容性最老,也最脆弱
Ubuntu 22.04 LTS 起默认停用,RHEL 9 需手动 chmod +x 并启用 rc-local.service。除非维护存量机器,不建议新系统再用。
决策树:30 秒判断你该选哪条路
- 机器重启频率 ≥1 次/天且无人值守?→ systemd
- 仅个人开发机,偶尔重启,能手动排障?→ crontab@reboot 也能凑合
- 发行版为 CentOS 7 等老系统,维护周期到 2027 之后?→ 可临时 rc.local,但应规划迁移
一句话:只要系统支持 systemd,就优先 systemd;它让“快连 Linux 端如何配置订阅节点开机自启”具备可观测、可回退、可调试三大特性。
前置准备:安装 qlcli 与最小权限账号
1. 终端执行 sudo apt install qlcli(Debian/Ubuntu)或 sudo dnf install qlcli(Fedora/RHEL),安装路径通常为 /usr/bin/qlcli。2. 新建低权用户 sudo useradd -r -s /bin/false qlnode,避免用 root 跑代理进程。3. 把配置目录授权给该用户:sudo chown qlnode:qlnode /etc/quicklink -R。
systemd service 模板:最小可运行单元
创建 /etc/systemd/system/ql-subscribe.service:
[Unit] Description=QuickLink Subscribe Fetcher Wants=network-online.target After=network-online.target [Service] Type=oneshot User=qlnode ExecStart=/usr/bin/qlcli sub-fetch --config /etc/quicklink/sub.json --output /var/lib/quicklink/nodes.json RemainAfterExit=yes StandardOutput=journal StandardError=journal [Install] WantedBy=multi-user.target
再建 /etc/systemd/system/ql-connect.service:
[Unit] Description=QuickLink Auto Connect Wants=ql-subscribe.service After=ql-subscribe.service [Service] Type=simple User=qlnode ExecStart=/usr/bin/qlcli connect --auto-best --config /var/lib/quicklink/nodes.json Restart=on-failure RestartSec=30 StandardOutput=journal StandardError=journal [Install] WantedBy=multi-user.target
启用并启动:
sudo systemctl daemon-reload sudo systemctl enable --now ql-subscribe.service sudo systemctl enable --now ql-connect.service
路径差异:Debian vs RHEL vs Arch
- Debian 系习惯把变量文件放 /var/lib/;RHEL 系推荐 /run/quicklink/,重启即失,适合放 PID 或临时 token。
- Arch 社区包把 qlcli 配置示例放 /etc/quicklink/examples,需手动 cp 到 /etc/quicklink 才生效。
- 若启用 SELinux(RHEL/Fedora 默认),需执行
setsebool -P nis_enabled 1或自定义模块,否则 qlcli 会被拒绝出站。
回退方案:如何快速关闭自启并切回手动
1. 停止服务:sudo systemctl stop ql-connect ql-subscribe。2. 禁用:sudo systemctl disable ql-connect ql-subscribe。3. 若需临时手动连接,可直接 qlcli connect --node JP-Tokyo-01,与 systemd 互不干扰。
验证与观测:确认订阅已拉取、节点已连
①看日志:journalctl -u ql-subscribe -e 应出现 “sub-fetched 42 nodes”。②看连接:qlcli status 若返回 “Connected to SG-Singapore-11” 则成功。③看路由:ip route | grep ql0 应出现默认走虚拟网卡。④看 DNS 泄露:dig whoami.ds.akahelp.net 返回的 IP 应属于节点所在地。
故障排查:订阅拉取失败、连接无限重启
现象
journalctl 反复提示 “Error 602: Subscription expired”。
可能原因
系统时间错→TLS 证书校验失败;或账号在另一设备登录被踢。
验证
timedatectl status看是否 NTP 同步;官网个人中心看在线设备数。处置
①执行
sudo timedatectl set-ntp true;②重新登录获取新 token 并写回 /etc/quicklink/sub.json;③重启服务。
适用/不适用场景清单
| 场景 | 是否推荐 | 原因 |
|---|---|---|
| 海外直播推流机 | ✅ 强烈推荐 | 重启后无人值守,必须自动恢复出口 IP |
| 公司 CI Runner | ✅ 推荐 | 拉取 Docker Hub 被墙镜像,需确保 job 启动前网络已通 |
| 个人笔记本 | ⚠️ 可选 | 经常休眠唤醒,机场流量有限,可能浪费订阅流量 |
| 多用户共享服务器 | ❌ 不推荐 | 单一出口 IP 易被多人同时操作触发风控 |
最佳实践检查表(上线前对照)
- qlcli 版本是否 ≥8.3.0?
qlcli version确认。 - service 文件是否指定 User=qlnode 而非 root?
- 订阅文件权限 ≤644,且 token 已用
chmod 600保护? - 是否执行
systemctl --failed确认无异常单元? - 是否用
loginctl show-user qlnode确认该用户无多余会话?
FAQ(Schema.org 格式)
启用量子加密后开机延迟明显,如何排除?
在 /etc/quicklink/sub.json 里给节点加 "pq":false 字段,或 service 文件 ExecStart 尾部加 --no-pq 开关,重启服务可见延迟回落。
ql-connect 失败却看不到图形弹窗,如何获取日志?
systemd 已将 stdout/stderr 重定向到 journal,执行 journalctl -u ql-connect -f 即可实时跟踪,无需图形。
能否让特定用户登录后再启动,而非开机即启?
可以。把 WantedBy=multi-user.target 改成 graphical-session.target,并加 PartOf=graphical-session.target,即可绑定到该用户图形会话,退出即停。
收尾:下一步行动建议
至此,你已走完“快连 Linux 端如何配置订阅节点开机自启”完整链路:方案对比、最小权限 service、回退、验证、排障。建议先在测试机按模板跑通,确认 journal 无报错再推生产。若未来 CLI 新增 --daemon 参数,可把 Type=simple 改为 Type=notify,实现更精准的退出码通知。保持 qlcli 在最新版本,关注官方 release note,任何破坏式变更都能第一时间知情。


