Files
op-packages/luci-app-flowproxy/root/etc/init.d/flowproxy
T

91 lines
1.8 KiB
Bash
Executable File

#!/bin/sh /etc/rc.common
# FlowProxy - Traffic Diversion Service
START=99
STOP=10
USE_PROCD=1
. /usr/share/flowproxy/common.sh
_stop_unlocked() {
log_msg info "Stopping FlowProxy..."
# 强制先移除标记,防止状态误报及旧守护进程继续动作
rm -f "$STATE_FILE" "$DEGRADED_FILE" "$GEN_FILE"
delete_route
delete_nft
cleanup_dns
rm -f "$NFT_CONF"
log_msg info "FlowProxy service stopped"
}
_start_unlocked() {
local enabled=$(uci -q get "$UCI_CONFIG.global.enabled")
if [ "${enabled:-0}" != "1" ]; then
log_msg info "FlowProxy is disabled, ensuring service is stopped"
_stop_unlocked
return 0
fi
log_msg info "Starting FlowProxy..."
check_env || return 1
check_config || return 1
apply_nft_rules || return 1
add_route || { delete_nft; return 1; }
setup_dns
rm -f "$DEGRADED_FILE"
touch "$STATE_FILE"
local gen="$(date +%s)-$$"
echo "$gen" > "$GEN_FILE"
local monitor_enabled=$(uci -q get "$UCI_CONFIG.global.monitor_enabled" || echo 0)
if [ "$monitor_enabled" = "1" ]; then
procd_open_instance "watchdog"
procd_set_param command /usr/share/flowproxy/watchdog.sh "$gen"
procd_set_param respawn 3600 5 5
procd_close_instance
fi
log_msg info "FlowProxy service started successfully"
return 0
}
start_service() {
acquire_lock
_start_unlocked
local ret=$?
release_lock
return $ret
}
stop_service() {
acquire_lock
_stop_unlocked
local ret=$?
release_lock
return $ret
}
restart_service() {
acquire_lock
_stop_unlocked
_start_unlocked
local ret=$?
release_lock
return $ret
}
reload_service() {
restart_service
}
service_triggers() {
# 监听自身配置改动
procd_add_reload_trigger "$UCI_CONFIG"
# 监听防火墙重载事件,防止规则被 fw4 清空后无法自动恢复
procd_add_reload_trigger "firewall"
}