80 lines
2.0 KiB
Bash
Executable File
80 lines
2.0 KiB
Bash
Executable File
#!/bin/bash
|
|
# 启动脚本 - 同时运行FastAPI应用和队列消费者
|
|
|
|
set -e
|
|
|
|
echo "========================================="
|
|
echo "Starting Qwen Agent Application"
|
|
echo "========================================="
|
|
|
|
# 创建必要的目录
|
|
mkdir -p /app/projects/queue_data
|
|
|
|
# 等待一下确保目录创建完成
|
|
sleep 1
|
|
|
|
echo "Starting FastAPI application with uvicorn..."
|
|
# 在后台启动FastAPI应用
|
|
uvicorn fastapi_app:app --host 0.0.0.0 --port 8001 &
|
|
|
|
echo "Starting queue consumer..."
|
|
# 在后台启动队列消费者
|
|
python task_queue/consumer.py --workers=2 --worker-type=threads &
|
|
|
|
# 捕获所有后台进程的PID
|
|
API_PID=$!
|
|
CONSUMER_PID=$!
|
|
|
|
echo "========================================="
|
|
echo "Services started successfully!"
|
|
echo "FastAPI PID: $API_PID"
|
|
echo "Queue Consumer PID: $CONSUMER_PID"
|
|
echo "========================================="
|
|
|
|
# 定义清理函数
|
|
cleanup() {
|
|
echo "========================================="
|
|
echo "Stopping services..."
|
|
echo "========================================="
|
|
|
|
# 停止FastAPI应用
|
|
if [ ! -z "$API_PID" ]; then
|
|
echo "Stopping FastAPI application (PID: $API_PID)..."
|
|
kill $API_PID 2>/dev/null || true
|
|
fi
|
|
|
|
# 停止队列消费者
|
|
if [ ! -z "$CONSUMER_PID" ]; then
|
|
echo "Stopping queue consumer (PID: $CONSUMER_PID)..."
|
|
kill $CONSUMER_PID 2>/dev/null || true
|
|
fi
|
|
|
|
# 等待进程结束
|
|
wait $API_PID 2>/dev/null || true
|
|
wait $CONSUMER_PID 2>/dev/null || true
|
|
|
|
echo "All services stopped."
|
|
exit 0
|
|
}
|
|
|
|
# 捕获中断信号
|
|
trap cleanup SIGINT SIGTERM
|
|
|
|
# 持续监控进程状态
|
|
while true; do
|
|
# 检查FastAPI进程是否还在运行
|
|
if ! kill -0 $API_PID 2>/dev/null; then
|
|
echo "FastAPI application has stopped unexpectedly"
|
|
cleanup
|
|
fi
|
|
|
|
# 检查队列消费者进程是否还在运行
|
|
if ! kill -0 $CONSUMER_PID 2>/dev/null; then
|
|
echo "Queue consumer has stopped unexpectedly"
|
|
cleanup
|
|
fi
|
|
|
|
# 每5秒检查一次
|
|
sleep 5
|
|
done
|