@@ -66,6 +66,34 @@ cleanup_runtime_files() {
6666 rm -f " $RUNTIME_DIR /outbounds.json" 2> /dev/null || true
6767}
6868
69+ # ######################################
70+ # 打印服务动作横幅 (按是否跳过 tproxy 区分级别与措辞)
71+ # 参数:
72+ # $1 动作动词 (启动/停止/重启)
73+ # $2 是否仅核心 (1=跳过 tproxy,记 DEBUG;否则记 INFO)
74+ # 返回: 无
75+ # ######################################
76+ log_service_action () {
77+ if [ " $2 " = " 1" ]; then
78+ log " DEBUG" " $1 sing-box 核心服务 (跳过 tproxy)"
79+ else
80+ log " INFO" " $1 sing-box 服务"
81+ fi
82+ }
83+
84+ # ######################################
85+ # 判断节点选择模式是否为手动选择
86+ # 参数:
87+ # $1 选择模式 (CUR_SELECTOR_MODE)
88+ # 返回: 0=手动选择,非 0=其他
89+ # ######################################
90+ is_manual_selector () {
91+ case " $1 " in
92+ manual | selector | 手动选择 | 手动) return 0 ;;
93+ * ) return 1 ;;
94+ esac
95+ }
96+
6997# ######################################
7098# 启动 sing-box 服务
7199# 参数:
@@ -77,11 +105,7 @@ do_start() {
77105 local pid runtime_outbounds new_pid
78106 local node_path
79107
80- if [ " $skip_tproxy " = " 1" ]; then
81- log " DEBUG" " 启动 sing-box 核心服务 (跳过 tproxy)"
82- else
83- log " INFO" " 启动 sing-box 服务"
84- fi
108+ log_service_action " 启动" " $skip_tproxy "
85109 verify_environment
86110
87111 # 已在运行则直接返回,保证幂等
131155 api_wait_available 60 1 || die " 控制接口不可用,启动失败"
132156 LOG_STDERR=0 LOG_LEVEL=WARN SWITCH_ALLOW_RESTART=0 sh " $SWITCH_SCRIPT " mode " $CUR_OUTBOUND_MODE " || die " 运行模式同步失败,启动中止"
133157 # 手动选择模式下额外同步当前节点
134- if [ " $CUR_SELECTOR_MODE " = " manual " ] || [ " $CUR_SELECTOR_MODE " = " selector " ] || [ " $CUR_SELECTOR_MODE " = " 手动选择 " ] || [ " $CUR_SELECTOR_MODE " = " 手动 " ] ; then
158+ if is_manual_selector " $CUR_SELECTOR_MODE " ; then
135159 LOG_STDERR=0 LOG_LEVEL=WARN SWITCH_ALLOW_RESTART=0 sh " $SWITCH_SCRIPT " config " $CUR_OUTBOUND_CONFIG " || die " 节点配置同步失败,启动中止"
136160 fi
137161
@@ -154,11 +178,7 @@ do_stop() {
154178 local skip_tproxy=" ${1:- 0} "
155179 local pid count
156180
157- if [ " $skip_tproxy " = " 1" ]; then
158- log " DEBUG" " 停止 sing-box 核心服务 (跳过 tproxy)"
159- else
160- log " INFO" " 停止 sing-box 服务"
161- fi
181+ log_service_action " 停止" " $skip_tproxy "
162182 verify_environment
163183
164184 # 先清理透明代理规则 (非跳过模式)
@@ -206,20 +226,13 @@ do_stop() {
206226# ######################################
207227# 重启 sing-box 服务
208228# 参数:
209- # $1 目标 (core =仅核心,跳过透明代理;其他=完整重启 )
229+ # $1 是否跳过透明代理 (1 =仅核心,默认 0 )
210230# 返回: 无
211231# ######################################
212232do_restart () {
213- local target=" ${1:- } "
214- local skip_tproxy=0
233+ local skip_tproxy=" ${1:- 0} "
215234
216- # core 模式仅重启核心进程
217- if [ " $target " = " core" ]; then
218- skip_tproxy=1
219- log " DEBUG" " 重启 sing-box 核心服务 (跳过 tproxy)"
220- else
221- log " INFO" " 重启 sing-box 服务"
222- fi
235+ log_service_action " 重启" " $skip_tproxy "
223236
224237 do_stop " $skip_tproxy "
225238 sleep 1
@@ -269,34 +282,21 @@ EOF
269282# 主入口:解析命令并分发
270283# 参数:
271284# $1 命令 (start/stop/restart/status)
272- # $2 可选目标 (core)
285+ # $2 可选目标 (core=仅操作核心,跳过透明代理 )
273286# 返回: 依命令而定
274287# ######################################
275288main () {
276- case " ${1:- } " in
277- start)
278- # 解析是否仅启动核心
279- local target=" ${2:- } "
280- local skip=0
281- [ " $target " = " core" ] && skip=1
282- do_start " $skip "
283- ;;
284- stop)
285- # 解析是否仅停止核心
286- local target=" ${2:- } "
287- local skip=0
288- [ " $target " = " core" ] && skip=1
289- do_stop " $skip "
290- ;;
291- restart)
292- do_restart " ${2:- } "
293- ;;
294- status)
295- do_status
296- ;;
297- -h | --help | help)
298- show_usage
299- ;;
289+ local cmd=" ${1:- } "
290+ # 第二参数为 core 时仅操作核心进程
291+ local skip=0
292+ [ " ${2:- } " = " core" ] && skip=1
293+
294+ case " $cmd " in
295+ start) do_start " $skip " ;;
296+ stop) do_stop " $skip " ;;
297+ restart) do_restart " $skip " ;;
298+ status) do_status ;;
299+ -h | --help | help) show_usage ;;
300300 * )
301301 show_usage
302302 exit 1
0 commit comments