mirror of
https://github.com//cppla/ServerStatus
synced 2026-08-06 19:53:57 +08:00
59 lines
1.5 KiB
Bash
59 lines
1.5 KiB
Bash
#!/bin/sh
|
|
set -eu
|
|
|
|
: "${CONFIG_PATH:=/ServerStatus/server/config.json}"
|
|
: "${WEB_DIR:=/usr/share/nginx/html}"
|
|
: "${SERGATE_PID_FILE:=/tmp/serverstatus-sergate.pid}"
|
|
: "${ADMIN_API_BIND:=127.0.0.1}"
|
|
: "${ADMIN_API_PORT:=35602}"
|
|
|
|
STOPPING=0
|
|
SERGATE_PID=""
|
|
API_PID=""
|
|
|
|
stop_all() {
|
|
STOPPING=1
|
|
if [ -n "$SERGATE_PID" ] && kill -0 "$SERGATE_PID" 2>/dev/null; then
|
|
kill -TERM "$SERGATE_PID" 2>/dev/null || true
|
|
fi
|
|
if [ -n "$API_PID" ] && kill -0 "$API_PID" 2>/dev/null; then
|
|
kill -TERM "$API_PID" 2>/dev/null || true
|
|
fi
|
|
nginx -s quit 2>/dev/null || true
|
|
}
|
|
|
|
trap 'stop_all; exit 0' INT TERM QUIT
|
|
|
|
mkdir -p "$WEB_DIR/json"
|
|
nginx
|
|
|
|
CONFIG_PATH="$CONFIG_PATH" \
|
|
SERGATE_PID_FILE="$SERGATE_PID_FILE" \
|
|
ADMIN_API_BIND="$ADMIN_API_BIND" \
|
|
ADMIN_API_PORT="$ADMIN_API_PORT" \
|
|
ADMIN_TOKEN="${ADMIN_TOKEN:-}" \
|
|
ADMIN_CORS_ORIGIN="${ADMIN_CORS_ORIGIN:-}" \
|
|
python3 /ServerStatus/server/manage_api.py &
|
|
API_PID="$!"
|
|
if [ -n "${ADMIN_TOKEN:-}" ]; then
|
|
echo "management API enabled on ${ADMIN_API_BIND}:${ADMIN_API_PORT}"
|
|
else
|
|
echo "management API running in read-only discovery mode; set ADMIN_TOKEN to enable writes"
|
|
fi
|
|
|
|
while [ "$STOPPING" -eq 0 ]; do
|
|
/ServerStatus/server/sergate --config="$CONFIG_PATH" --web-dir="$WEB_DIR" &
|
|
SERGATE_PID="$!"
|
|
echo "$SERGATE_PID" > "$SERGATE_PID_FILE"
|
|
set +e
|
|
wait "$SERGATE_PID"
|
|
STATUS="$?"
|
|
set -e
|
|
rm -f "$SERGATE_PID_FILE"
|
|
if [ "$STOPPING" -eq 1 ]; then
|
|
exit "$STATUS"
|
|
fi
|
|
echo "sergate exited with status ${STATUS}; restarting in 1s"
|
|
sleep 1
|
|
done
|