57 lines
1.6 KiB
Bash
Executable File
57 lines
1.6 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# --- FUNKTION: Signal-Handling ---
|
|
# Diese Funktion wird aufgerufen, wenn der Container gestoppt werden soll
|
|
# (SIGTERM/SIGINT)
|
|
cleanup() {
|
|
echo "--- Abbruchsignal empfangen! Beende Ollama sauber... ---"
|
|
kill "$OLLAMA_PID" 2>/dev/null
|
|
wait "$OLLAMA_PID" 2>/dev/null
|
|
exit 0
|
|
}
|
|
|
|
# Registriere die Cleanup-Funktion für SIGTERM (Stop) und SIGINT (Strg+C)
|
|
trap cleanup SIGTERM SIGINT
|
|
|
|
# --- SCHRITT 1: Ollama Server starten ---
|
|
echo "--- Starte Ollama Server im Hintergrund ---"
|
|
ollama serve &
|
|
OLLAMA_PID=$!
|
|
|
|
# --- SCHRITT 2: Robuster API-Health-Check ---
|
|
echo "--- Warte auf Ollama Server (API Check) ---"
|
|
MAX_RETRIES=30
|
|
COUNT=0
|
|
|
|
# Wir nutzen ollama list selbst als Healthcheck, das ist 100% verlässlich
|
|
until ollama list &>/dev/null || [ $COUNT -eq $MAX_RETRIES ]; do
|
|
sleep 2
|
|
COUNT=$((COUNT + 1))
|
|
echo "Warte auf API-Bereitschaft... ($COUNT/$MAX_RETRIES)"
|
|
done
|
|
|
|
if [ $COUNT -eq $MAX_RETRIES ]; then
|
|
echo "FEHLER: Ollama Server ist nach 60 Sekunden nicht bereit."
|
|
exit 1
|
|
fi
|
|
|
|
echo "--- Ollama Server ist online und bereit für Pulls! ---"
|
|
|
|
# --- SCHRITT 3: Modelle fehlerfrei herunterladen ---
|
|
# Wir nutzen ein alternatives Parsing, das immun gegen komplexe Strings ist
|
|
if [ -z "$MODEL_LIST" ]; then
|
|
echo "WARNUNG: Keine Modelle in MODEL_LIST definiert."
|
|
else
|
|
echo "--- Modell-Check gestartet ---"
|
|
|
|
# Ersetzt Kommas durch Leerzeichen und läuft sauber durch jedes Modell
|
|
for model in $(echo "$MODEL_LIST" | tr ',' ' '); do
|
|
echo "Prüfe Modell: $model"
|
|
ollama pull "$model"
|
|
done
|
|
echo "--- Alle Modelle sind bereit ---"
|
|
fi
|
|
|
|
# --- SCHRITT 4: Hauptprozess halten ---
|
|
wait $OLLAMA_PID
|