From b58e4aa82c4fdc5d753777aed52f6e42d3b461bf Mon Sep 17 00:00:00 2001 From: wnlen <62139570+wnlen@users.noreply.github.com> Date: Wed, 14 Jan 2026 16:27:20 +0800 Subject: [PATCH] Update shutdown.sh --- shutdown.sh | 91 ++++++++++++++++++++++++++++------------------------- 1 file changed, 49 insertions(+), 42 deletions(-) diff --git a/shutdown.sh b/shutdown.sh index 8230d5e..dae0242 100644 --- a/shutdown.sh +++ b/shutdown.sh @@ -1,53 +1,60 @@ -#!/bin/bash +#!/usr/bin/env bash +set -euo pipefail -# 关闭clash服务 -Server_Dir=$(cd $(dirname "${BASH_SOURCE[0]}") && pwd) +# 关闭 clash 服务 +Server_Dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" Temp_Dir="$Server_Dir/temp" +Conf_Dir="$Server_Dir/conf" PID_FILE="$Temp_Dir/clash.pid" + +# 1) 优先按 PID_FILE 停 if [ -f "$PID_FILE" ]; then - PID=$(cat "$PID_FILE") - if [ -n "$PID" ]; then - kill "$PID" - for i in {1..5}; do - sleep 1 - if ! kill -0 "$PID" 2>/dev/null; then - break - fi - done - if kill -0 "$PID" 2>/dev/null; then - kill -9 "$PID" - fi - fi - rm -f "$PID_FILE" + PID="$(cat "$PID_FILE" 2>/dev/null || true)" + if [ -n "${PID:-}" ] && kill -0 "$PID" 2>/dev/null; then + kill "$PID" 2>/dev/null || true + for _ in {1..5}; do + sleep 1 + if ! kill -0 "$PID" 2>/dev/null; then + break + fi + done + if kill -0 "$PID" 2>/dev/null; then + kill -9 "$PID" 2>/dev/null || true + fi + fi + rm -f "$PID_FILE" else - PIDS=$(pgrep -f "clash-linux-") - if [ -n "$PIDS" ]; then - kill $PIDS - for i in {1..5}; do - sleep 1 - if ! pgrep -f "clash-linux-" >/dev/null; then - break - fi - done - if pgrep -f "clash-linux-" >/dev/null; then - kill -9 $PIDS - fi - fi + # 2) 兜底:按 “-d $Conf_Dir” 特征找(比 clash-linux- 更稳) + # 说明:你的 start.sh 启动命令形如: -d "$Conf_Dir" + PIDS="$(pgrep -f " -d ${Conf_Dir}(\s|$)" || true)" + if [ -n "${PIDS:-}" ]; then + kill $PIDS 2>/dev/null || true + for _ in {1..5}; do + sleep 1 + if ! pgrep -f " -d ${Conf_Dir}(\s|$)" >/dev/null 2>&1; then + break + fi + done + if pgrep -f " -d ${Conf_Dir}(\s|$)" >/dev/null 2>&1; then + kill -9 $PIDS 2>/dev/null || true + fi + fi fi -# 清除环境变量 +# 3) 清理环境变量文件(删除,而不是置空) Env_File="${CLASH_ENV_FILE:-}" if [ "$Env_File" != "off" ] && [ "$Env_File" != "disabled" ]; then - if [ -z "$Env_File" ]; then - if [ -w /etc/profile.d ]; then - Env_File="/etc/profile.d/clash-for-linux.sh" - else - Env_File="$Temp_Dir/clash-for-linux.sh" - fi - fi - if [ -f "$Env_File" ]; then - > "$Env_File" - fi + if [ -z "$Env_File" ]; then + if [ -w /etc/profile.d ]; then + Env_File="/etc/profile.d/clash-for-linux.sh" + else + Env_File="$Temp_Dir/clash-for-linux.sh" + fi + fi + + if [ -f "$Env_File" ]; then + rm -f "$Env_File" || true + fi fi -echo -e "\n服务关闭成功,请执行以下命令关闭系统代理:proxy_off\n" +echo -e "\n服务关闭成功。若当前终端已开启代理,请执行:proxy_off\n"