博客/自启配置

快连Linux命令行如何实现开机自动重连?

快连官方团队
自启systemdcrontab命令行开机Linux
快连Linux开机自动重连, 如何在Linux设置快连自启, 快连systemd服务配置步骤, 快连crontab @reboot用法, 快连开机未自动重连怎么办, 快连Linux自启日志查看, systemctl启用快连服务, 快连无人值守自动重连最佳实践

为什么开机自动重连值得单独成篇

在服务器、树莓派或矿机里,快连Linux命令行一旦掉线,人工 SSH 上去敲 kuailian-cli reconnect 既低效又可能错过关键任务。把重连做成「开机即自愈」的守护单元,可把故障窗口压到分钟级,同时让 CI/CD、爬虫、跨境同步脚本免于中断。

然而 Linux 发行版初始化机制差异大:Ubuntu 22/24 默认 systemd,Debian 11 仍兼容 rc.local,而 NAS 固件往往阉割 systemd。本文用「问题—约束—解法」的工程师视角,先给出决策树,再落地下述三条主流路径,并附上回退与观测方法,确保你 10 分钟内可复现、可回滚。

为什么开机自动重连值得单独成篇
为什么开机自动重连值得单独成篇

路径选择决策树:systemd、crontab、rc.local 怎么挑

1. 看系统版本

执行 ps --no-headers -o comm 1,输出 systemd 则优先 systemd;输出 init 再检查 /etc/inittab 是否存在,存在则考虑 rc.local;crontab 作为兜底,任何发行版都可用,但缺少依赖顺序控制。

2. 看依赖需求

若重连前必须等网络-online 或 Docker 网络就绪,systemd 的 After=network-online.target 最稳;crontab 的 @reboot 不保证网络已通,需自写重试;rc.local 介于两者之间,但日志分散。

3. 看维护成本

systemd 一次写好可随软件包升级自动 reload;crontab 需要 root 或个人 crontab 分开维护;rc.local 在新版系统常被默认禁用,需手动 chmod +x 与 enable 操作,长期可维护性最差。

提示:若机器由多人共享,建议 systemd 单元放 /etc/systemd/system,统一 root 管控,避免个人 crontab 被误删。

方案 A:systemd 守护单元(推荐)

步骤 1:准备调用脚本

创建 /opt/kuailian/reconnect.sh,内容如下,确保退出码能被 systemd 识别:

#!/bin/bash
/usr/local/bin/kuailian-cli status || /usr/local/bin/kuailian-cli connect cn-guangzhou-01
exit $?

赋权 chmod 755 /opt/kuailian/reconnect.sh

步骤 2:编写单元文件

新建 /etc/systemd/system/kuailian-reconnect.service

[Unit]
Description=Kuailian privacy tool Keep-alive & Reconnect
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
ExecStart=/opt/kuailian/reconnect.sh
Restart=on-failure
RestartSec=30
User=root
StandardOutput=journal
StandardError=journal

[Install]
WantedBy=multi-user.target

步骤 3:启用与验证

  1. systemctl daemon-reload
  2. systemctl enable --now kuailian-reconnect.service
  3. systemctl status kuailian-reconnect 观察 Active: active (running)
  4. 手动 kill kuailian-cli 进程,30 秒内应被 systemd 重新拉起。

边界注意:若节点标签写错,脚本会永远返回非 0,导致无限重启。建议先在命令行跑一次确认 exit 0。

方案 B:@reboot crontab 轻量法

适用场景

NAS、WSL1、容器镜像等精简环境,systemd 不可用或用户无 root。

操作步骤

  1. 执行 crontab -e
  2. 写入 @reboot sleep 30 && /opt/kuailian/reconnect.sh >>/tmp/kuailian-cron.log 2>&1
  3. 保存退出,重启测试。

sleep 30 是经验性观察:WSL1 网络栈初始化滞后,若过早调用会提示「Network unreachable」。

回退与观测

crontab 不提供原生重试,可在脚本内加循环:

until kuailian-cli status; do
  kuailian-cli connect cn-guangzhou-01
  sleep 60
done

日志落盘到 /tmp,需配合 logrotate 或手动清理,防止长期写入撑满 tmpfs。

方案 C:rc.local 兼容兜底

启用流程

  1. 检查 /etc/rc.local 是否存在且可执行;若不存在则新建。
  2. 加入 /opt/kuailian/reconnect.sh &,注意放后台避免阻塞启动。
  3. chmod +x /etc/rc.local
  4. 若系统使用 systemd,可额外执行 systemctl enable rc-local.service 确保兼容层生效。

缺点说明

rc.local 失败不会自动重试,也不产生结构化日志;一旦脚本阻塞,可能拖慢整个启动序列。仅建议在老旧发行版或嵌入式固件临时过渡。

验证与观测:如何确认真的重连成功

指标 1:IP 出口变化

在重连脚本尾部追加:

curl -s https://api.ip.sb/ip > /var/log/kuailian-ip.log

每次切换后比对地址,若与预期节点城市一致则判定成功。

指标 1:IP 出口变化
指标 1:IP 出口变化

指标 2:systemd 自带计数

执行 systemctl show kuailian-reconnect -p NRestarts,若数字持续增长说明脚本不断异常退出,需检查节点名或本地防火墙。

指标 3:持续丢包探测

可并行跑一个 systemd timer,每 5 分钟 ping 1.1.1.1 30 次,丢包率>50% 时主动 systemctl restart kuailian-reconnect,形成外环自愈。

常见故障排查表

现象可能原因验证命令处置
systemctl 启动失败脚本无执行权限namei -l /opt/kuailian/reconnect.shchmod 755
日志提示 "Network unreachable"启动时网络未就绪journalctl -b | grep network加 After=network-online.target
节点切换后无出口流量路由表残留ip rule showkuailian-cli disconnect && reconnect
crontab 日志空白环境变量缺失which kuailian-cli脚本内写绝对路径

进阶:与 Docker、CI 协同

若重连后需重启依赖容器,可在 systemd 单元追加 ExecStartPost=docker restart myapp;但注意「网络命名空间」隔离,建议把 kuailian-cli 跑在宿主机,容器通过 --network host 或代理环境变量指向 127.0.0.1:1080,避免容器内重复拨号。

不适用场景与合规提醒

  • 公司内网若禁止第三方 TUN 驱动,需先申请白名单,否则 systemd 无限重启会被 IDS 标记为异常进程。
  • 在共享矿场,若机器镜像来自上游厂商,/usr/local/bin 可能被只读挂载,此时需把可执行文件改放 /opt 并调整单元内路径。
  • 教育网 802.1x 认证前网络处于隔离域,开机 30 秒内 network-online.target 可能永远达不到,需改用 crontab + 人工延迟。

最佳实践速查表

  1. 优先 systemd,日志集中,失败可自动重试。
  2. 脚本必须返回 0,非 0 视为异常。
  3. 节点名先手动验证,再写死到脚本,避免拼写错误导致无限重启。
  4. 每次升级 kuailian-cli 后执行 systemctl daemon-reload,防止单元缓存旧路径。
  5. 每季度 review 一次 IP 出口日志,确认节点池未下架。

FAQ(结构化数据)

WSL2 能用 systemd 方案吗?

截至当前最新版本,Windows 11 24H2 已支持 WSL2 systemd,只需在 /etc/wsl.conf 加 [boot] systemd=true,随后按本文 systemd 步骤操作即可;若用 WSL1 请退回 crontab。

rc.local 里放后台 & 符号,日志去哪看?

输出被重定向到 /dev/null,需在命令后手动追加 >>/var/log/rc-local.log 2>&1,并确保该文件可写;否则失效信息无法追溯。

能否同时跑多条节点做负载?

kuailian-cli 单进程只维护一条隧道,若需多出口请开多个配置目录与端口,配合 ip rule 分流;但 systemd 需分别写单元,注意端口冲突。

开机自启会影响手动断连吗?

systemd 只在检测到非 0 退出码时重启,若你手动执行 kuailian-cli disconnect 后脚本返回 0,则不会再次自动连;需要连时再 systemctl start 即可。

收尾与下一步

至此,你已掌握三条主流开机自启路径的完整落地与回退方法。建议先在测试机复现,确认日志无异常后再推生产;随后把「节点名称」「重试间隔」写成变量,存进 /etc/default/kuailian,方便日后批量替换。最后,把本文最佳实践速查表贴到团队 Wiki,下次系统迁移可 3 分钟完成切换。

📺 相关视频教程

UFW防火墙使用配置|保护VPS服务器 | Ubuntu22.04

相关关键词:
快连Linux开机自动重连如何在Linux设置快连自启快连systemd服务配置步骤快连crontab @reboot用法快连开机未自动重连怎么办快连Linux自启日志查看systemctl启用快连服务快连无人值守自动重连最佳实践