mirror of
https://github.com/kiddin9/op-packages.git
synced 2026-11-13 20:08:05 +08:00
104 lines
2.6 KiB
Bash
Executable File
104 lines
2.6 KiB
Bash
Executable File
#!/bin/sh /etc/rc.common
|
||
|
||
START=90
|
||
STOP=10
|
||
USE_PROCD=1
|
||
|
||
PROG=/usr/bin/pingpacket.sh
|
||
RUN_DIR=/var/run/pingpacket
|
||
STATUS_FILE=/tmp/pingpacket_status.json
|
||
CONFIG_FILE=$RUN_DIR/config
|
||
LOG_FILE=/tmp/pingpacket.log
|
||
LOG_MAX_LINES=500
|
||
|
||
log_rotate() {
|
||
[ -f "$LOG_FILE" ] || return 0
|
||
tail -n "$LOG_MAX_LINES" "$LOG_FILE" > "${LOG_FILE}.tmp" 2>/dev/null && \
|
||
mv -f "${LOG_FILE}.tmp" "$LOG_FILE"
|
||
}
|
||
|
||
log_event() {
|
||
local event_type="$1"
|
||
local message="$2"
|
||
local timestamp
|
||
|
||
timestamp="$(date '+%Y-%m-%d %H:%M:%S')"
|
||
printf '[%s] [%s] %s\n' "$timestamp" "$event_type" "$message" >> "$LOG_FILE"
|
||
log_rotate
|
||
}
|
||
|
||
format_foreign_summary() {
|
||
local target="$1"
|
||
local proxy_type="$2"
|
||
local proxy_host="$3"
|
||
local proxy_port="$4"
|
||
|
||
[ -n "$target" ] || {
|
||
echo "未配置"
|
||
return
|
||
}
|
||
|
||
if [ -n "$proxy_port" ]; then
|
||
echo "${target}(代理 ${proxy_type} 本机端口 ${proxy_port})"
|
||
else
|
||
echo "${target}(代理端口未配置)"
|
||
fi
|
||
}
|
||
|
||
start_service() {
|
||
local enabled domestic foreign proxy_type proxy_host proxy_port domestic_interval foreign_interval foreign_summary
|
||
|
||
config_load pingpacket
|
||
config_get enabled config enabled "0"
|
||
config_get domestic config domestic_target ""
|
||
config_get foreign config foreign_target ""
|
||
config_get proxy_type config foreign_proxy_type "socks5h"
|
||
config_get proxy_host config foreign_proxy_host "127.0.0.1"
|
||
config_get proxy_port config foreign_proxy_port "7891"
|
||
config_get domestic_interval config domestic_interval "1"
|
||
config_get foreign_interval config foreign_interval "5"
|
||
proxy_type="socks5h"
|
||
|
||
[ "$enabled" = "1" ] || return 0
|
||
[ -n "$domestic" ] || [ -n "$foreign" ] || return 0
|
||
|
||
rm -rf "$RUN_DIR"
|
||
rm -f "$STATUS_FILE"
|
||
mkdir -p "$RUN_DIR"
|
||
printf '%s\n' "$domestic" > "$CONFIG_FILE"
|
||
printf '%s\n' "$foreign" >> "$CONFIG_FILE"
|
||
printf '%s\n' "$proxy_type" >> "$CONFIG_FILE"
|
||
printf '%s\n' "${proxy_host:-127.0.0.1}" >> "$CONFIG_FILE"
|
||
printf '%s\n' "$proxy_port" >> "$CONFIG_FILE"
|
||
printf '%s\n' "$domestic_interval" >> "$CONFIG_FILE"
|
||
printf '%s\n' "$foreign_interval" >> "$CONFIG_FILE"
|
||
|
||
foreign_summary="$(format_foreign_summary "$foreign" "$proxy_type" "$proxy_host" "$proxy_port")"
|
||
log_event "启动" "监控服务已启动,国内目标:${domestic:-未配置},国外目标:${foreign_summary}"
|
||
|
||
procd_open_instance
|
||
procd_set_param command /bin/sh "$PROG"
|
||
procd_set_param respawn 3600 10 5
|
||
procd_set_param stdout 1
|
||
procd_set_param stderr 1
|
||
procd_close_instance
|
||
}
|
||
|
||
stop_service() {
|
||
if [ -d "$RUN_DIR" ] || [ -f "$STATUS_FILE" ]; then
|
||
log_event "停止" "监控服务已停止。"
|
||
fi
|
||
|
||
rm -rf "$RUN_DIR"
|
||
rm -f "$STATUS_FILE"
|
||
}
|
||
|
||
reload_service() {
|
||
stop
|
||
start
|
||
}
|
||
|
||
service_triggers() {
|
||
procd_add_reload_trigger "pingpacket"
|
||
}
|