feat(worker): start.sh 改为后台服务开关(start/stop/restart/status)
- ./start.sh 现支持 start/stop/restart/status 子命令,无参默认 start - 后台运行 + PID 文件(worker.pid) + 日志(worker.log),手动控制开关 - 前台热重载开发仍用 run_worker.sh - gitignore 补 worker.pid / worker.log Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -10,6 +10,10 @@ gateway/config.json
|
|||||||
# worker 配置(含鉴权密码,不入 git)
|
# worker 配置(含鉴权密码,不入 git)
|
||||||
worker_config.json
|
worker_config.json
|
||||||
|
|
||||||
|
# worker 运行期文件(PID / 日志)
|
||||||
|
worker.pid
|
||||||
|
worker.log
|
||||||
|
|
||||||
# SegFormer 模型权重(~323MB,体积过大,不入 git,见 OFFLINE_ASSETS.md)
|
# SegFormer 模型权重(~323MB,体积过大,不入 git,见 OFFLINE_ASSETS.md)
|
||||||
hairline/models/face-parsing/model.safetensors
|
hairline/models/face-parsing/model.safetensors
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,67 @@
|
|||||||
#!/bin/bash
|
#!/usr/bin/env bash
|
||||||
# worker 启动脚本:监听 0.0.0.0:8187(防火墙仅放行网关 IP)。
|
# worker 服务手动开关(接口1 四庭七眼测量)。
|
||||||
|
#
|
||||||
|
# 用法:
|
||||||
|
# ./start.sh # = start,后台启动
|
||||||
|
# ./start.sh start
|
||||||
|
# ./start.sh stop
|
||||||
|
# ./start.sh restart
|
||||||
|
# ./start.sh status
|
||||||
|
# HOST=127.0.0.1 PORT=8187 ./start.sh # 用环境变量覆盖监听地址
|
||||||
|
#
|
||||||
|
# 后台运行:日志写 worker.log,PID 写 worker.pid(均已 gitignore)。
|
||||||
|
# 开发时若想前台+热重载,用 ./run_worker.sh。
|
||||||
|
set -uo pipefail
|
||||||
cd "$(dirname "$0")"
|
cd "$(dirname "$0")"
|
||||||
exec ./venv/bin/uvicorn app:app --host 0.0.0.0 --port 8187
|
|
||||||
|
HOST="${HOST:-0.0.0.0}"
|
||||||
|
PORT="${PORT:-8187}"
|
||||||
|
PIDFILE="worker.pid"
|
||||||
|
LOGFILE="worker.log"
|
||||||
|
UVICORN="./venv/bin/uvicorn"
|
||||||
|
|
||||||
|
is_running() {
|
||||||
|
[ -f "$PIDFILE" ] && kill -0 "$(cat "$PIDFILE")" 2>/dev/null
|
||||||
|
}
|
||||||
|
|
||||||
|
start() {
|
||||||
|
if is_running; then
|
||||||
|
echo "已在运行 (PID $(cat "$PIDFILE")),监听 ${HOST}:${PORT}"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
rm -f "$PIDFILE"
|
||||||
|
if [ ! -x "$UVICORN" ]; then
|
||||||
|
echo "找不到 $UVICORN,请先创建 venv 并安装依赖" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
nohup "$UVICORN" app:app --host "$HOST" --port "$PORT" >> "$LOGFILE" 2>&1 &
|
||||||
|
echo $! > "$PIDFILE"
|
||||||
|
echo "已启动 (PID $!),监听 ${HOST}:${PORT}"
|
||||||
|
echo "日志: tail -f $LOGFILE 就绪后 /health 返回 200"
|
||||||
|
}
|
||||||
|
|
||||||
|
stop() {
|
||||||
|
if is_running; then
|
||||||
|
kill "$(cat "$PIDFILE")" && rm -f "$PIDFILE"
|
||||||
|
echo "已停止"
|
||||||
|
else
|
||||||
|
echo "未在运行"
|
||||||
|
rm -f "$PIDFILE"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
status() {
|
||||||
|
if is_running; then
|
||||||
|
echo "运行中 (PID $(cat "$PIDFILE")),监听 ${HOST}:${PORT}"
|
||||||
|
else
|
||||||
|
echo "未运行"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
case "${1:-start}" in
|
||||||
|
start) start ;;
|
||||||
|
stop) stop ;;
|
||||||
|
restart) stop; sleep 1; start ;;
|
||||||
|
status) status ;;
|
||||||
|
*) echo "用法: $0 {start|stop|restart|status}"; exit 1 ;;
|
||||||
|
esac
|
||||||
|
|||||||
Reference in New Issue
Block a user