File size: 2,200 Bytes
dc4e6da | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 | #!/bin/bash
set -e
echo "π Starting DocGenie API + Worker..."
echo "============================================================"
echo "π§ Configuration:"
echo " PORT: ${PORT:-7860}"
echo " REDIS_URL: ${REDIS_URL:0:30}..."
echo " ANTHROPIC_API_KEY: ${ANTHROPIC_API_KEY:0:20}..."
echo "============================================================"
# Function to add prefix to logs
prefix_logs() {
local prefix=$1
while IFS= read -r line; do
echo "[$prefix] $line"
done
}
# Start API server in background with log prefix
echo "π Starting FastAPI server..."
uvicorn api.main:app --host 0.0.0.0 --port ${PORT:-7860} 2>&1 | prefix_logs "API" &
API_PID=$!
echo " PID: $API_PID"
# Give API a moment to start
sleep 2
# Start RQ worker in background with log prefix
# Use timestamp + random number to ensure unique worker name across deployments
WORKER_ID="docgenie-worker-$(date +%s)-${RANDOM}"
echo "π· Starting RQ Worker..."
rq worker ${RQ_QUEUE_NAME:-docgenie} --url $REDIS_URL --name "$WORKER_ID" --verbose 2>&1 | prefix_logs "WORKER" &
WORKER_PID=$!
echo " PID: $WORKER_PID"
echo "============================================================"
echo "β Both processes started successfully"
echo " API: http://0.0.0.0:${PORT:-7860}"
echo " Worker: Connected to Redis"
echo "============================================================"
# Function to handle shutdown
shutdown() {
echo ""
echo "π Shutting down gracefully..."
kill -TERM $API_PID 2>/dev/null || true
kill -TERM $WORKER_PID 2>/dev/null || true
wait $API_PID 2>/dev/null || true
wait $WORKER_PID 2>/dev/null || true
echo "β Shutdown complete"
exit 0
}
# Trap SIGTERM and SIGINT
trap shutdown SIGTERM SIGINT
# Wait for both processes - if either exits, shutdown both
while kill -0 $API_PID 2>/dev/null && kill -0 $WORKER_PID 2>/dev/null; do
sleep 1
done
# If we get here, one process died
echo ""
echo "β One of the processes exited unexpectedly"
if ! kill -0 $API_PID 2>/dev/null; then
echo " API process died (PID: $API_PID)"
fi
if ! kill -0 $WORKER_PID 2>/dev/null; then
echo " Worker process died (PID: $WORKER_PID)"
fi
shutdown
|