Clash 启动脚本报错怎么逐项排查
Clash 启动脚本报错时,第一步应检查日志输出路径是否正确。多数用户将启动脚本配置为输出日志至 `/var/log/clash.log`,但若该目录无写权限或不存在,脚本会因无法创建日志文件而报错。可通过 `ls -ld /var/log` 确认目录权限,使用 `sudo mkdir -p /var/log/clash` 创建目录,并以 `sudo chown $USER:$USER /var/log/clash` 赋予当前用户写入权。若日志路径被误设为只读设备(如只读挂载的 U 盘),则需修改配置文件中的 `log-path` 字段。
第二步是验证 YAML 配置文件语法是否合法。即使一个空格错误或冒号缺失,Clash 也会拒绝加载。可使用在线工具如 https://www.yamllint.com 进行格式校验,或在终端运行 `yq eval -P . config.yaml`(需安装 yq 工具)快速定位问题。例如,若某规则组写成 `rules: [DIRECT, PROXY]` 而实际应为 `rules: ["DIRECT", "PROXY"]`,则会导致解析失败,此时需添加引号并重新加载。
第三步应确认系统环境变量中是否包含 Clash 所需依赖库路径。常见于 Linux 发行版中,如 Ubuntu 22.04,若未安装 `libssl1.1`,启动脚本会提示 `libssl.so.1.1: cannot open shared object file`。可通过 `apt list --installed | grep libssl` 检查,若缺失则执行 `sudo apt install libssl1.1` 安装。类似地,若脚本调用 `./clash` 但未赋予执行权限,应运行 `chmod +x ./clash` 解决。
第四步关注端口占用情况。当脚本尝试绑定 7890 端口但已有其他进程占用时,会报错 `listen tcp 0.0.0.0:7890: bind: address already in use`。可用 `lsof -i :7890` 或 `netstat -tuln | grep 7890` 查看占用进程,再通过 `kill -9 <PID>` 强制终止。若为 Docker 容器内运行,还需检查容器端口映射是否冲突,避免重复暴露相同端口。 延伸阅读:PikPak 分享链接打不开怎么处理。
第五步排查脚本自身逻辑错误。例如某启动脚本中存在 `if [ ! -f "$CONFIG_FILE" ]; then echo "Config missing"; exit 1; fi`,但实际 `$CONFIG_FILE` 变量未被正确赋值。建议在脚本开头加入 `set -euo pipefail` 启用严格模式,使未定义变量立即报错。此外,若脚本中使用了 `curl -sL https://example.com/config.yaml > config.yaml`,但服务器返回 403 错误,应检查 URL 是否过期或需认证,此时可参考简历投递后多久跟进一次合适——通常 5-7 天后发送一次礼貌提醒,同样适用于判断 API 接口是否失效。
第六步测试最小可复现场景。将复杂脚本拆分为多个独立步骤:先单独运行 `./clash -d ./config` 看是否能正常启动;再逐步加入代理规则、自定义规则等。若仅基础启动成功,则说明配置文件或规则部分存在问题。此方法类似处理 PikPak 分享链接打不开的问题:先尝试在浏览器中直接打开链接,若失败则检查是否需要登录、链接是否过期或被风控,再通过更换网络环境或清除缓存重试。
最后,建立自动化诊断流程。编写一个 `check_clash.sh` 脚本,集成上述所有检测项:验证日志路径权限、校验 YAML 语法、检查依赖包、确认端口空闲、验证变量赋值、测试基本启动。每次启动前自动运行,输出清晰状态报告。例如,若发现 `yq` 未安装,脚本可提示 `Please run: sudo apt install yq`。这种结构化排查方式,能将平均故障解决时间从数小时压缩至 10 分钟以内。