46 lines
1.4 KiB
Bash
46 lines
1.4 KiB
Bash
#!/bin/sh
|
||
# sgame-admin-server 容器守护入口(alpine 容器内由 busybox sh 执行)。
|
||
# /repo 是 gitsync 容器同步下来的部署仓(只读挂载),里面有:
|
||
# server — linux/amd64 静态二进制(前端已 embed,时区已内嵌)
|
||
# config.yaml — 基础配置(敏感项全部由环境变量覆盖)
|
||
# app-entry.sh — 本脚本
|
||
# 逻辑:启动 server → 每 10s 比对仓库里二进制的 md5 → 变了就杀进程重启。
|
||
# 进程崩溃同样会回到循环顶部自动拉起。
|
||
|
||
BIN=/repo/server
|
||
RUN=/tmp/server.run
|
||
|
||
echo "[entry] waiting for $BIN ..."
|
||
while [ ! -f "$BIN" ]; do sleep 2; done
|
||
|
||
while true; do
|
||
# 等 gitsync 的 checkout 落定:两次校验和一致才启动
|
||
SUM=$(md5sum "$BIN" | cut -d' ' -f1)
|
||
sleep 1
|
||
SUM2=$(md5sum "$BIN" | cut -d' ' -f1)
|
||
if [ "$SUM" != "$SUM2" ]; then
|
||
continue
|
||
fi
|
||
|
||
# 跑 /tmp 副本而不是 /repo 原件,避免 git reset 覆盖运行中的可执行文件
|
||
cp "$BIN" "$RUN"
|
||
chmod +x "$RUN"
|
||
echo "[entry] starting server (md5 $SUM)"
|
||
"$RUN" -config /repo/config.yaml &
|
||
PID=$!
|
||
|
||
while kill -0 "$PID" 2>/dev/null; do
|
||
sleep 10
|
||
NEW=$(md5sum "$BIN" 2>/dev/null | cut -d' ' -f1)
|
||
if [ -n "$NEW" ] && [ "$NEW" != "$SUM" ]; then
|
||
echo "[entry] new binary detected, restarting"
|
||
kill "$PID"
|
||
wait "$PID" 2>/dev/null
|
||
break
|
||
fi
|
||
done
|
||
|
||
echo "[entry] server exited, relaunching in 2s"
|
||
sleep 2
|
||
done
|