This commit is contained in:
2025-12-05 22:28:10 +08:00
commit fa12c85cbc
5 changed files with 99 additions and 0 deletions

78
vpncloud_init.d Normal file
View File

@@ -0,0 +1,78 @@
#!/sbin/openrc-run
name="VPNCloud"
description="VPNCloud 2.4.0"
extra_started_commands="status"
CONF="${SVCNAME#*.}"
CONFIG_FILE="/etc/vpncloud/$CONF.net"
PIDFILE="/var/run/vpncloud-$CONF.pid"
depend() {
need net
use dns
}
checkconfig() {
if [ "$CONF" = "$SVCNAME" ]; then
eerror "Usage error: Create symlink first:"
eerror " ln -s /etc/init.d/vpncloud /etc/init.d/vpncloud.<conf-name>"
eerror "Then start: rc-service vpncloud.<conf-name> start"
return 1
fi
if [ ! -f "$CONFIG_FILE" ]; then
eerror "Config file $CONFIG_FILE not found!"
return 1
fi
mkdir -p /var/run
chmod 755 /var/run
return 0
}
start() {
checkconfig || return 1
ebegin "Starting $description (config: $CONF.net)"
nohup /usr/local/bin/vpncloud --config "$CONFIG_FILE" > /dev/null 2>&1 &
echo $! > "$PIDFILE"
eend $? "Start failed!"
}
stop() {
checkconfig || return 1
ebegin "Stopping $description (config: $CONF.net)"
if [ -f "$PIDFILE" ]; then
local PID=$(cat "$PIDFILE")
# 适配 BusyBox ps grep 过滤 PID替代 ps -p
if ps | grep -w "$PID" > /dev/null; then
kill -INT "$PID" && sleep 2
# 再次检查未停止则强制终止
if ps | grep -w "$PID" > /dev/null; then
kill -KILL "$PID"
fi
fi
rm -f "$PIDFILE"
else
eerror "PID file not found - service not running?"
return 1
fi
eend $? "Stop failed!"
}
status() {
checkconfig || return 1
ebegin "Checking $description status (config: $CONF.net)"
if [ -f "$PIDFILE" ] && ps | grep -w "$(cat "$PIDFILE")" > /dev/null; then
eecho "Running (PID: $(cat "$PIDFILE"))"
return 0
else
eecho "Not running"
return 1
fi
eend $?
}