Skip to content

Commit 48f76eb

Browse files
committed
refactor(service): 去重横幅与参数解析,统一 do_* 签名
- 抽出 log_service_action 替换 do_start/do_stop/do_restart 中 重复的 core/full 横幅 if-else - 抽出 is_manual_selector 替换 4 段 || 手动模式判断长链 - do_restart 参数由 target 字符串改为 skip_tproxy(0/1),与 do_start/do_stop 签名统一 - main() 进入 case 前解析一次 skip,各分支单行分发 - 行为不变:所有调用方 (switch/cli/action/boot) 语义保持一致
1 parent 04df27e commit 48f76eb

1 file changed

Lines changed: 46 additions & 46 deletions

File tree

src/module/scripts/core/service.sh

Lines changed: 46 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -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
# 已在运行则直接返回,保证幂等
@@ -131,7 +155,7 @@ EOF
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
#######################################
212232
do_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
#######################################
275288
main() {
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

Comments
 (0)