mirror of
https://github.com/kiddin9/op-packages.git
synced 2026-11-13 20:08:05 +08:00
91 lines
1.8 KiB
Bash
Executable File
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"
|
|
}
|