快连Linux客户端如何命令行自启并指定配置文件路径?

功能定位:为什么需要命令行自启
在服务器、NAS、树莓派等无人值守场景,快连Linux客户端必须随系统启动并立即读入指定配置,否则重启后流量走裸网,轻则爬虫任务失败,重则账号被风控。图形界面“开机自启”开关仅对桌面会话生效,SSH 重启后依旧掉线;而 systemd 能在多用户.target阶段就拉起进程,比传统 init.d 更稳、日志更集中,也方便配合 Ansible 批量下发。
版本演进:CLI 接口的变迁
截至当前的最新版本(2026-03 发布的 8.4.2),快连把 CLI 独立成 kuailian-cli,不再依赖 Electron 壳;配置文件也改为纯 JSON,路径可自定义。早期 7.x 版需要把 .conf 硬塞到 /opt/kuailian/config/,升级时会被覆盖;8.x 支持 --config 参数后,才彻底解耦,适合容器与多实例。
决策树:init.d 还是 systemd?
经验性观察:Ubuntu 20.04 之后,systemd 已成默认;若系统仍是 CentOS 6 或 Debian 7,则只能退回到 init.d。以下三条即可判断:
ls /run/systemd/system存在 → 用 systemd;- 需要 cgroups 限流 → systemd 更原生;
- 打包给未知客户 → 写两套,优先 systemd。
前置准备:拿到 CLI 与配置文件
1. 安装:在官网下载 kuailian-cli_8.4.2_linux_amd64.deb,dpkg -i 即可;或解压缩包到 /usr/local/bin。
2. 登录一次图形界面,把节点、协议、分流规则调好,点“导出 JSON”存为 /etc/kuailian/prod.json——此文件含加密 token,后续 CLI 直接复用,无需再次扫码。
提示:JSON 里 "auto_connect": true 决定启动后是否立即连节点;若机器重启频繁,可设为 false,配合 systemd 的 ExecStartPost 自行决定时机。
systemd 方案:最小可用单元
创建 /etc/systemd/system/kuailian.service:
[Unit] Description=Kuailian CLI with custom config After=network-online.target Wants=network-online.target [Service] Type=simple ExecStart=/usr/local/bin/kuailian-cli --config /etc/kuailian/prod.json Restart=on-failure RestartSec=10 StandardOutput=journal StandardError=journal # 非 root 用户可单独建 kuailian 账号 User=kuailian Group=kuailian [Install] WantedBy=multi-user.target
加载与验证
systemctl daemon-reloadsystemctl enable --now kuailiansystemctl status kuailian看 Active: activejournalctl -u kuailian -f若出现Connected to HK-S01即成功。
init.d 回退方案:老系统兼容
对于 SysV 系统,把下列脚本存为 /etc/init.d/kuailian,给予 755 权限:
#!/bin/sh
### BEGIN INIT INFO
# Provides: kuailian
# Required-Start: $network $remote_fs
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Kuailian CLI
### END INIT INFO
case "$1" in
start)
/usr/local/bin/kuailian-cli --config /etc/kuailian/prod.json &
;;
stop)
pkill -f kuailian-cli
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
esac
随后 chkconfig kuailian on(CentOS)或 update-rc.d kuailian defaults(Debian)。
多实例与端口隔离
一台机器需要“大陆出口”与“海外出口”双实例时,复制 JSON,把 local_socks_port 改成 1080/1081,再建 [email protected] 模板:
[Service] ExecStart=/usr/local/bin/kuailian-cli --config /etc/kuailian/%i.json
启用:systemctl enable --now kuailian@海外,日志互不影响。
故障排查:启动失败常见三例
| 现象 | journalctl 关键词 | 处置 |
|---|---|---|
| 秒级崩溃 | token expired | JSON 里 refresh_token 失效,回图形端重新导出 |
| 权限拒绝 | Permission denied | kuailian 账号无 /etc/kuailian 读取权,chmod 640 + chown |
| 网络未就绪 | Name resolution failed | systemd 缺 Wants=network-online.target,补完重载 |
验证与观测:用 watchdog 保活
经验性观察:凌晨 3-5 点部分 IDC 会触发虚拟网卡重置,进程活着但流量黑洞。可在单元里追加:
WatchdogSec=60 ExecStartPost=/bin/bash -c 'until ip link show tun0; do sleep 5; done'
若 60 s 内未收到 systemd-notify,systemd 自动重启服务。
何时不该用命令行自启
- 电脑双系统,重启后默认进 Windows → Linux 并未启动,自启形同虚设;
- 笔记本挂起/唤醒频繁,systemd 无法感知,建议用桌面 autostart;
- 合规要求“必须人机交互二次确认”的政企内网,CLI 保存凭证可能违规。
最佳实践 5 条检查表
- JSON 导出后立即做
cp prod.json prod.json.bak,防止图形端误操作覆盖; - kuailian 账号设
/usr/sbin/nologin,禁止 SSH 登录; - 给单元加
CPUQuota=50%,避免节点测速时打满小核 NAS; - 每月把
/var/log/journal打包归档,方便回溯闪退; - 升级前先在测试机执行
systemctl stop kuailian,确认新版 CLI 仍支持旧 JSON 字段。
注意:本文路径以 Debian 系为例,RedHat 系把 /usr/local/bin 换成 /opt/kuailian/bin 即可;具体路径因安装方式而异,请以实际为准。
FAQ:命令行自启高频疑问
Q1:能否把 JSON 放在用户家目录?
可以,但 systemd 单元里必须写绝对路径且保证 User= 有读取权限;家目录加密时启动阶段尚未解密,会读失败,建议放 /etc。
Q2:stop 后 tun0 残留怎么办?
在 ExecStop 加 ip link delete tun0;若仍失败,把 KillMode=mixed 让 systemd 发 SIGKILL。
Q3:如何切换节点但不重启服务?
kuailian-cli 支持 SIGUSR1 重载配置;发送 kill -USR1 $(cat /run/kuailian.pid) 即可,JSON 里节点 ID 变更后瞬时生效。
Q4:日志太大能否关闭?
在单元里加 StandardOutput=null 即丢弃,但排障时黑盒;更推荐用 journalctl --vacuum-size=100M 定期裁剪。
Q5:同一账号 10 台上限会算这台吗?
会。CLI 与图形端共用设备计数,若 NAS 长期在线,建议把不常用的手机先退出,避免新设备被踢。
收尾:下一步行动
读完本文,你已知道快连Linux客户端为何、何时以及如何用 systemd 实现命令行自启并指定配置文件路径。现在就把导出的 JSON 放到 /etc,复制上面的单元文件,执行一次 daemon-reload,重启机器——journalctl 出现 Connected 即代表成功。后续升级客户端前,先在测试环境确认 JSON 字段兼容,再推到生产,便可长期享受“重启即联网”的无人值守体验。
