Files
2026-10-09 04:58:55 +08:00

86 lines
1.9 KiB
Bash
Executable File

#!/bin/sh /etc/rc.common
START=99
STOP=15
ROOT="${IPKG_INSTROOT:-}"
. "$ROOT/usr/share/passwall/utils.sh"
APP_FILE=${APP_PATH}/app.sh
LOCK_FILE=${LOCK_PATH}/${CONFIG}.lock
set_lock() {
mkdir -p "$LOCK_PATH" || return 1
command exec 9>"$LOCK_FILE" || return 1
flock -xn 9
}
set_lock_wait() {
mkdir -p "$LOCK_PATH" || return 1
command exec 9>"$LOCK_FILE" || return 1
flock -x 9
}
unset_lock() {
flock -u 9
exec 9>&-
}
boot_func() {
rm -f ${LOCK_PATH}/${CONFIG}_ready.lock
local delay=$(uci -q get ${CONFIG}.@global_delay[0].start_delay || echo 1)
if [ "$delay" -gt 0 ]; then
echolog "执行启动延时 $delay 秒后再启动!"
sleep $delay
fi
restart boot || return 1
touch ${LOCK_PATH}/${CONFIG}_ready.lock
}
boot() {
boot_func >/dev/null 2>&1 &
}
start() {
set_lock || { echolog "脚本已经在运行,不重复运行,退出."; return 0; }
"$APP_FILE" start "$2" 9>&-
unset_lock
}
stop() {
set_lock_wait || { echolog "无法取得停止锁,退出."; return 1; }
"$APP_FILE" stop "$2" 9>&-
unset_lock
}
restart() {
local action=${2:-$1}
[ "$action" = "restart" ] && action=
set_lock || { echolog "脚本已经在运行,不重复运行,退出."; return 0; }
local update_status=1
for i in $(seq 1 300); do
PASSWALL_UPDATE_LOCK="${LOCK_PATH}/${CONFIG}_sub_rule.lock" lua -e '
local nixio = require "nixio"
local file = nixio.open(os.getenv("PASSWALL_UPDATE_LOCK"), "a")
if not file then os.exit(2) end
os.exit(file:lock("tlock") and 0 or 1)
'
update_status=$?
[ "$update_status" -ne 1 ] && break
sleep 2
done
if [ "$update_status" -ne 0 ]; then
echolog "等待订阅/规则更新结束失败或超时,取消重启."
unset_lock
return 1
fi
"$APP_FILE" stop "$action" 9>&-
"$APP_FILE" start "$action" 9>&-
unset_lock
}
reload() {
echo "Warning: This service does not support configuration reloading"
echo "Performing full restart instead..."
restart
}