69 lines
2.0 KiB
Bash
69 lines
2.0 KiB
Bash
#!/bin/bash
|
||
# Auto-Restart Script für geänderte Docker-Compose Stacks
|
||
# Nur laufende, aktive Container werden neu gestartet
|
||
# Inaktive Container bleiben unberührt
|
||
# Logs im Repo-Verzeichnis
|
||
#test
|
||
|
||
REPO_DIR="/srv/docker"
|
||
LOGFILE="$REPO_DIR/scripts/docker-update.log"
|
||
|
||
# Liste der inaktiven Container
|
||
INACTIVE_CONTAINERS=("adguard" "kea" "caddy" "wikijs")
|
||
|
||
log() {
|
||
echo "$(date '+%Y-%m-%d %H:%M:%S') | $*" | tee -a "$LOGFILE"
|
||
}
|
||
|
||
log "===== Starting Auto-Restart (final) ====="
|
||
|
||
cd "$REPO_DIR" || { log "ERROR: Cannot enter $REPO_DIR"; exit 1; }
|
||
|
||
# 1️⃣ Git Pull + Hard Reset (VM exakt auf Remote-Stand bringen)
|
||
git fetch --all &>/dev/null
|
||
git reset --hard origin/main &>/dev/null
|
||
log "Pulled latest changes and reset VM to remote state."
|
||
|
||
# 2️⃣ Geänderte Compose-Dateien ermitteln
|
||
CHANGED=$(git diff --name-only HEAD~1 HEAD | grep -E '^compose/.+/docker-compose\.yml$' || true)
|
||
|
||
if [ -z "$CHANGED" ]; then
|
||
log "No Compose files changed. Nothing to restart."
|
||
exit 0
|
||
fi
|
||
|
||
# 3️⃣ Nur laufende, geänderte Container neu starten
|
||
for FILE in $CHANGED; do
|
||
CONTAINER_NAME=$(echo "$FILE" | cut -d'/' -f2)
|
||
|
||
# Inaktive Container überspringen
|
||
if [[ " ${INACTIVE_CONTAINERS[@]} " =~ " ${CONTAINER_NAME} " ]]; then
|
||
log "Skipping inactive container: $CONTAINER_NAME"
|
||
continue
|
||
fi
|
||
|
||
COMPOSE_DIR="$REPO_DIR/compose/$CONTAINER_NAME"
|
||
if [ ! -d "$COMPOSE_DIR" ]; then
|
||
log "Warning: $COMPOSE_DIR does not exist, skipping..."
|
||
continue
|
||
fi
|
||
|
||
# Prüfen, ob Container läuft
|
||
RUNNING=$(docker compose -f "$COMPOSE_DIR/docker-compose.yml" ps -q)
|
||
if [ -z "$RUNNING" ]; then
|
||
log "Container $CONTAINER_NAME is stopped. Skipping restart."
|
||
continue
|
||
fi
|
||
|
||
log "Restarting running container: $CONTAINER_NAME"
|
||
cd "$COMPOSE_DIR" || continue
|
||
|
||
docker compose up -d &>/dev/null
|
||
if [ $? -eq 0 ]; then
|
||
log "✅ $CONTAINER_NAME restarted successfully"
|
||
else
|
||
log "❌ Failed to restart $CONTAINER_NAME"
|
||
fi
|
||
done
|
||
|
||
log "===== Auto-Restart Completed =====" |