mirror of
https://github.com/wnlen/clash-for-linux.git
synced 2026-02-04 10:11:28 +08:00
Update start.sh
This commit is contained in:
38
start.sh
38
start.sh
@ -417,15 +417,39 @@ if [ "$SKIP_CONFIG_REBUILD" != "true" ]; then
|
|||||||
echo -e "\033[33m[WARN]\033[0m 未检测到可用的 subconverter,跳过订阅转换"
|
echo -e "\033[33m[WARN]\033[0m 未检测到可用的 subconverter,跳过订阅转换"
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 3) 取出代理相关配置(从 proxies: 开始)
|
# 3) 订阅形态判断:
|
||||||
|
# - 如果已经是完整 Clash 配置(Meta/Mihomo 常见 mixed-port / proxy-providers 等),直接用它作为运行配置
|
||||||
|
# - 否则才走 “proxies: 抽取 + template 拼接”
|
||||||
|
if grep -qE '^(mixed-port:|port:|proxy-providers:|proxies:)' "$Temp_Dir/clash_config.yaml"; then
|
||||||
|
# 情况 A:完整配置(优先)
|
||||||
|
if grep -q '^proxies:' "$Temp_Dir/clash_config.yaml" || grep -q '^proxy-providers:' "$Temp_Dir/clash_config.yaml" || grep -q '^mixed-port:' "$Temp_Dir/clash_config.yaml" || grep -q '^port:' "$Temp_Dir/clash_config.yaml"; then
|
||||||
|
echo "[INFO] subscription looks like a full Clash config, use it directly"
|
||||||
|
cp -f "$Temp_Dir/clash_config.yaml" "$CONFIG_FILE"
|
||||||
|
# 写入 secret(运行态)
|
||||||
|
force_write_secret "$CONFIG_FILE"
|
||||||
|
# 直接跳过后续拼接流程
|
||||||
|
SKIP_CONFIG_REBUILD=true
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
|
||||||
|
# 情况 B:不是完整配置,才尝试抽取 proxies 并拼接
|
||||||
|
if [ "$SKIP_CONFIG_REBUILD" != "true" ]; then
|
||||||
if grep -q '^proxies:' "$Temp_Dir/clash_config.yaml"; then
|
if grep -q '^proxies:' "$Temp_Dir/clash_config.yaml"; then
|
||||||
sed -n '/^proxies:/,$p' "$Temp_Dir/clash_config.yaml" > "$Temp_Dir/proxy.txt"
|
sed -n '/^proxies:/,$p' "$Temp_Dir/clash_config.yaml" > "$Temp_Dir/proxy.txt"
|
||||||
else
|
else
|
||||||
echo "[WARN] no top-level 'proxies:' found in subscription, skip proxy extraction" >&2
|
echo "[ERROR] subscription is not a full config and also has no 'proxies:'; cannot build config." >&2
|
||||||
|
# systemd 模式:兜底继续;非 systemd:退出
|
||||||
|
if [ "${SYSTEMD_MODE:-false}" = "true" ]; then
|
||||||
|
ensure_fallback_config || true
|
||||||
SKIP_CONFIG_REBUILD=true
|
SKIP_CONFIG_REBUILD=true
|
||||||
|
else
|
||||||
|
exit 2
|
||||||
|
fi
|
||||||
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 4) 合并形成新的 config,并替换配置占位符
|
# 4) 合并形成新的 config,并替换配置占位符
|
||||||
|
if [ "$SKIP_CONFIG_REBUILD" != "true" ]; then
|
||||||
cat "$Temp_Dir/templete_config.yaml" > "$CONFIG_FILE"
|
cat "$Temp_Dir/templete_config.yaml" > "$CONFIG_FILE"
|
||||||
cat "$Temp_Dir/proxy.txt" >> "$CONFIG_FILE"
|
cat "$Temp_Dir/proxy.txt" >> "$CONFIG_FILE"
|
||||||
|
|
||||||
@ -434,6 +458,7 @@ if [ "$SKIP_CONFIG_REBUILD" != "true" ]; then
|
|||||||
sed -i "s/CLASH_REDIR_PORT_PLACEHOLDER/${CLASH_REDIR_PORT}/g" "$CONFIG_FILE"
|
sed -i "s/CLASH_REDIR_PORT_PLACEHOLDER/${CLASH_REDIR_PORT}/g" "$CONFIG_FILE"
|
||||||
sed -i "s/CLASH_LISTEN_IP_PLACEHOLDER/${CLASH_LISTEN_IP}/g" "$CONFIG_FILE"
|
sed -i "s/CLASH_LISTEN_IP_PLACEHOLDER/${CLASH_LISTEN_IP}/g" "$CONFIG_FILE"
|
||||||
sed -i "s/CLASH_ALLOW_LAN_PLACEHOLDER/${CLASH_ALLOW_LAN}/g" "$CONFIG_FILE"
|
sed -i "s/CLASH_ALLOW_LAN_PLACEHOLDER/${CLASH_ALLOW_LAN}/g" "$CONFIG_FILE"
|
||||||
|
fi
|
||||||
|
|
||||||
# 5) 配置 external-controller
|
# 5) 配置 external-controller
|
||||||
if [ "$EXTERNAL_CONTROLLER_ENABLED" = "true" ]; then
|
if [ "$EXTERNAL_CONTROLLER_ENABLED" = "true" ]; then
|
||||||
@ -538,15 +563,18 @@ if [ "$ReturnStatus" -eq 0 ]; then
|
|||||||
echo "[INFO] SYSTEMD_MODE=true,前台启动交给 systemd 监管"
|
echo "[INFO] SYSTEMD_MODE=true,前台启动交给 systemd 监管"
|
||||||
echo "[INFO] Using config: $CONFIG_FILE"
|
echo "[INFO] Using config: $CONFIG_FILE"
|
||||||
echo "[INFO] Using runtime dir: $RUNTIME_DIR"
|
echo "[INFO] Using runtime dir: $RUNTIME_DIR"
|
||||||
# systemd 前台:让 systemd 直接跟踪 clash 进程
|
|
||||||
exec "$Clash_Bin" -d "$RUNTIME_DIR" -f "$CONFIG_FILE"
|
# systemd 前台:只用 -f 指定配置文件,-d 作为工作目录
|
||||||
|
exec "$Clash_Bin" -f "$CONFIG_FILE" -d "$RUNTIME_DIR"
|
||||||
else
|
else
|
||||||
echo "[INFO] 后台启动 (nohup)"
|
echo "[INFO] 后台启动 (nohup)"
|
||||||
echo "[INFO] Using config: $CONFIG_FILE"
|
echo "[INFO] Using config: $CONFIG_FILE"
|
||||||
echo "[INFO] Using runtime dir: $RUNTIME_DIR"
|
echo "[INFO] Using runtime dir: $RUNTIME_DIR"
|
||||||
nohup "$Clash_Bin" -d "$RUNTIME_DIR" -f "$CONFIG_FILE" >>"$Log_Dir/clash.log" 2>&1 &
|
|
||||||
|
nohup "$Clash_Bin" -f "$CONFIG_FILE" -d "$RUNTIME_DIR" >>"$Log_Dir/clash.log" 2>&1 &
|
||||||
PID=$!
|
PID=$!
|
||||||
ReturnStatus=$?
|
ReturnStatus=$?
|
||||||
|
|
||||||
if [ "$ReturnStatus" -eq 0 ]; then
|
if [ "$ReturnStatus" -eq 0 ]; then
|
||||||
echo "$PID" > "$PID_FILE"
|
echo "$PID" > "$PID_FILE"
|
||||||
fi
|
fi
|
||||||
|
|||||||
Reference in New Issue
Block a user