快连如何在Linux系统中配置开机自启并后台守护?
kuailian在Linux下用systemd实现开机自启与守护,含路径、权限、回退与排障全步骤。

问题定义:为什么需要开机自启与守护
在服务器或软路由场景,kuailian(Kuailian privacy tool)一旦掉线,所有依赖流量转发的服务都会中断。手动重连既麻烦又不可控,于是“开机自启+崩溃自恢复”成了刚需。Linux 下最稳妥的载体是 systemd,它自带重启策略、日志集中、依赖顺序,比传统 rc.local 更可控。
前置条件与边界
1. 已安装官方 CLI 版 kuailian-cli(截至当前的最新版本)。
2. 系统为 systemd 发行版(Ubuntu 20.04+、Debian 11+、CentOS 8+、Arch 2026.x)。
3. 拥有 sudo 权限,且已登录账号并保存过凭据(~/.kuailian/creds.json)。
4. 不适用于 OpenWrt、Alpine 等非 systemd 系统,后者请改用 rc.local 或 procd。
最短可达路径:10 行配置完成自启
1. 创建 systemd 单元文件
sudo nano /etc/systemd/system/kuailian.service
粘贴以下内容,注意 ExecStart 路径与用户名替换为你的实际值:
[Unit] Description=Kuailian privacy tool daemon After=network-online.target Wants=network-online.target [Service] Type=simple User=kuailian Group=kuailian ExecStart=/usr/local/bin/kuailian-cli connect --config /home/kuailian/.kuailian/creds.json Restart=on-failure RestartSec=10 LimitNOFILE=65536 [Install] WantedBy=multi-user.target
2. 重载并启用
sudo systemctl daemon-reload sudo systemctl enable --now kuailian.service
3. 验证状态
systemctl status kuailian.service --no-pager -l
若看到 Active: active (running) 且日志无密码错误,即成功。
例外与副作用:何时不该用 systemd
1. 容器镜像(Docker、LXC)内若已用 tini 或 s6,重复 init 会产生僵尸进程;此时应将 kuailian-cli 作为前台主进程直接运行。
2. 多用户共享机器且各自拥有独立订阅,systemd 系统级单元会共用同一隧道,导致冲突;解决方案是改用用户级单元(--user)。
3. 磁盘只读型边缘设备(如树莓派 + overlayroot),systemd 重启可能因无法写日志而失败;可临时把 LogsDirectory 指向 tmpfs。
用户级单元:多账号场景的最佳实践
若你与普通用户共用主机,但各自想走不同出口,把单元放到用户命名空间即可:
mkdir -p ~/.config/systemd/user/ cp /etc/systemd/system/kuailian.service ~/.config/systemd/user/ systemctl --user daemon-reload systemctl --user enable --now kuailian.service
注意:用户级单元在服务器重启后不会自动启动,需再执行 loginctl enable-linger 用户名 让 systemd 保留会话。
回退方案:rc.local 兜底
当系统为老旧 CentOS 7 或裁剪版 Linux 缺少 systemd 时,可退回到 rc.local:
- 给 /etc/rc.d/rc.local 加可执行权限:
chmod +x /etc/rc.d/rc.local - 在文件末尾追加:
su - kuailian -c 'nohup /usr/local/bin/kuailian-cli connect >/tmp/kuailian.log 2>&1 &'
缺点:无重启策略,崩溃后需人工介入;日志分散;启动顺序不可控。仅作临时过渡。
守护强度调优:Restart 参数详解
| 策略值 | 含义 | 适用场景 |
|---|---|---|
| on-failure | 非零退出码或信号才重启 | 默认,防止手动 stop 被重启 |
| always | 无论退出码均重启 | 弱网频繁闪断,但需配合 StartLimit |
| on-abnormal | 信号或看门狗超时 | 对崩溃敏感,对正常退出不重启 |
经验性观察:若节点凌晨 4 点定时维护,kuailian-cli 会主动 exit 0,此时用 always 会导致高频重启;建议保持 on-failure,并加 StartLimitIntervalSec=300 StartLimitBurst=3 抑制雪崩。
日志观测与告警
1. 实时跟踪
sudo journalctl -fu kuailian.service
2. 失败统计
systemctl show kuailian.service -p NRestarts,RestartUSec
3. 简单邮件告警(可选)
在单元里追加 ExecStopPost=/usr/local/bin/send_alert.sh,脚本内判断退出码非零即发信。send_alert.sh 需自行编写,可用 msmtp 或 curl 调用第三方 API。
故障排查速查表
现象:systemctl start 后秒退,日志报 “permission denied”
原因:kuailian-cli 路径不在 /usr/local/bin,或单元里 User 无读取 creds.json 权限。
验证:执行 namei -l /home/kuailian/.kuailian/creds.json 查看每一层权限。
处置:把 User 改为实际拥有者,或 chmod 600 文件并 chown 对应用户。
现象:重启后隧道未建立,但状态显示 running
原因:network-online.target 在 Wi-Fi 拨号完成前触发,kuailian-cli 找不到路由。
验证:journalctl 里出现 “Network is unreachable”。
处置:单元里加 ExecStartPre=/bin/sleep 10 或使用 systemd-networkd-wait-online。
性能与资源占用
经验性观察:在 1 vCPU/512 MB 的轻量云主机上,kuailian-cli 常驻内存约 18–22 MB;开启 K-UDP 2.0 后,CPU 峰值占 3–5 %(100 Mbit/s 上下行)。若同时开多跳+Tor,内存会涨到 90 MB 左右,需评估 SWAP。
FAQ(使用 FAQPage Schema)
Q1:能否一台机器跑多个 kuailian 实例?
可以,用不同 systemd 实例名及独立 config 目录,并加 --iface kuailian1 指定虚拟网卡即可;注意防火墙需放行对应接口。
Q2:为什么 free -m 显示缓存一直涨?
kuailian-cli 内部 ringbuf 会缓存最近 256 MB 包用于 QoS 重传,属正常行为;内存紧张时内核会自动回收。
Q3:systemd 日志占满 /var/log 怎么办?
加 SystemMaxUse=200M 到 /etc/systemd/journald.conf,然后重启 systemd-journald 即可限制占用。
适用/不适用场景清单
- ✅ 软路由、NAS、云主机长期挂机,需要断线自愈。
- ✅ 个人开发机,每天重启多次,懒得手动连。
- ❌ 临时调试节点,频繁换区,手动操作反而更快。
- ❌ 合规要求“隧道必须人工二次认证”的政企内网。
最佳实践 5 条检查表
- 单元里永远加 RestartSec≥10,防止高频重连被服务器拉黑。
- creds.json 权限 600,避免其他用户扫到订阅令牌。
- 用 systemctl cat kuailian.service 确认最终合并项,防止 drop-in 冲突。
- 大版本升级前先 systemctl disable kuailian,升级完对比 CLI 参数是否变更,再重新 enable。
- 每季度用 journalctl --vacuum-time=30d 清理一次日志,防止 inode 耗尽。
收尾:下一步行动
至此,你已拥有“开机即通、崩溃自起”的 kuailian 守护方案。建议立即在测试机执行一次 sudo systemctl stop kuailian.service && sudo reboot,确认重启后隧道自动恢复;再通过 curl ipinfo.io 校验出口 IP 符合预期。若一切正常,把相同单元推到生产环境,并设置邮件或 Prometheus 告警,真正做到无人值守。