Qwen3xOllama / startup.sh
ankanpy's picture
Update startup.sh
9e61d3e verified
#!/bin/bash
# startup.sh
set -e # Exit immediately if a command exits with a non-zero status.
echo "Starting Ollama server in the background..."
ollama --version
ollama serve > /tmp/ollama.log 2>&1 &
OLLAMA_PID=$! # Get PID of the backgrounded ollama serve
echo "Waiting for Ollama to be ready (http://127.0.0.1:11434)..."
timeout_seconds=120
start_time=$(date +%s)
while ! curl -s --fail -o /dev/null http://127.0.0.1:11434; do
current_time=$(date +%s)
elapsed_time=$((current_time - start_time))
if [ "$elapsed_time" -ge "$timeout_seconds" ]; then
echo "Ollama failed to start within $timeout_seconds seconds. Check /tmp/ollama.log."
cat /tmp/ollama.log
exit 1
fi
echo -n "."
sleep 2
done
echo ""
echo "Ollama server started successfully."
# OLLAMA_PULL_MODELS will be passed as an environment variable from Dockerfile
echo "Models to pull from ENV: ${OLLAMA_PULL_MODELS}"
for model_name in ${OLLAMA_PULL_MODELS}; do
echo "Pulling model: ${model_name} (this may take several minutes)..."
ollama pull "${model_name}"
if [ $? -eq 0 ]; then
echo "Model ${model_name} pulled successfully."
else
echo "Failed to pull model ${model_name}. Check logs or model name."
fi
done
# Define a function to clean up (stop Ollama) when the script exits
cleanup() {
echo "Caught signal, shutting down Ollama (PID: $OLLAMA_PID)..."
if kill -0 $OLLAMA_PID > /dev/null 2>&1; then # Check if process exists
kill $OLLAMA_PID
wait $OLLAMA_PID # Wait for Ollama to actually terminate
echo "Ollama shut down."
else
echo "Ollama process (PID: $OLLAMA_PID) not found or already stopped."
fi
}
# Trap signals to call the cleanup function
# SIGINT is Ctrl+C, SIGTERM is `docker stop`
trap cleanup SIGINT SIGTERM
echo "Starting Gradio application (python app.py)..."
# Run python app.py in the foreground. It will now be PID 1 (or close to it)
# relative to this script, and signals will be handled by this script.
python app.py &
PYTHON_APP_PID=$!
wait $PYTHON_APP_PID # Wait for the python app to exit
# After python app exits, perform cleanup (this will also be called by trap)
cleanup
echo "Gradio application exited."