fix:增加定时推动

This commit is contained in:
吕新雨
2026-02-09 11:52:11 +08:00
parent 1e1e49ea57
commit 0b8bbebf6a
3 changed files with 157 additions and 4 deletions

View File

@@ -0,0 +1,85 @@
#!/bin/sh
set -eu
# 容器入口:
# - 默认只启动 API与原 Dockerfile 行为一致)
# - 如需测试“定时推送”,可额外启动 Celery Worker + Beat
#
# 环境变量:
# - START_API=1|0默认 1
# - START_WORKER=1|0默认 0
# - START_BEAT=1|0默认 0
# - START_ALL=1等价于 START_WORKER=1 + START_BEAT=1
# - HOST / PORTAPI 监听地址,默认 0.0.0.0:8000
log() {
echo "[entrypoint] $*"
}
START_API="${START_API:-1}"
START_WORKER="${START_WORKER:-0}"
START_BEAT="${START_BEAT:-0}"
if [ "${START_ALL:-0}" = "1" ]; then
START_WORKER="1"
START_BEAT="1"
fi
# Beat 只负责“投递任务到队列”,真正执行仍需要 Worker避免误配。
if [ "$START_BEAT" = "1" ] && [ "$START_WORKER" != "1" ]; then
log "提示:已启用 START_BEAT=1自动同时启用 START_WORKER=1否则队列无人执行。"
START_WORKER="1"
fi
PIDS=""
stop_children() {
# 温和退出
for pid in $PIDS; do
kill -TERM "$pid" >/dev/null 2>&1 || true
done
}
on_term() {
log "收到退出信号,正在停止子进程..."
stop_children
# 等待子进程退出,避免残留
wait >/dev/null 2>&1 || true
exit 0
}
trap on_term INT TERM
if [ "$START_WORKER" = "1" ]; then
log "启动 Celery Workercelery -A app.worker:celery_app worker -l info"
celery -A app.worker:celery_app worker -l info &
PIDS="$PIDS $!"
fi
if [ "$START_BEAT" = "1" ]; then
log "启动 Celery Beatcelery -A app.worker:celery_app beat -l info"
celery -A app.worker:celery_app beat -l info &
PIDS="$PIDS $!"
fi
if [ "$START_API" = "1" ]; then
HOST="${HOST:-0.0.0.0}"
PORT="${PORT:-8000}"
log "启动 APIuvicorn app.main:app --host $HOST --port $PORT"
uvicorn app.main:app --host "$HOST" --port "$PORT" &
API_PID="$!"
PIDS="$PIDS $API_PID"
# 以 API 生命周期为准API 退出则容器退出,并清理其他进程
wait "$API_PID"
CODE="$?"
log "API 已退出code=$CODE),正在停止其他进程..."
stop_children
wait >/dev/null 2>&1 || true
exit "$CODE"
fi
# 未启动 API就阻塞等待其他进程一般用于仅跑 worker/beat 的容器)
log "未启动 API等待后台进程..."
wait