diff --git a/update_containers.sh b/update_containers.sh index 23afdd1..426eacc 100755 --- a/update_containers.sh +++ b/update_containers.sh @@ -1,20 +1,54 @@ #!/bin/bash -cd /opt/docker/bentopdf -docker-compose down && docker-compose pull && docker-compose up -d >> /var/log/cron/update_bentopdf.log +# ──────────────────────────────────────────────────────────────────────── +# Zweck: Automatisches Prüfen und Anwenden von Updates für alle +# Docker‑Compose‑Projekte unter /opt/docker/ +# ──────────────────────────────────────────────────────────────────────── -cd /opt/docker/ddns -docker-compose down && docker-compose pull && docker-compose up -d >> /var/log/cron/update_ddns.log +set -euo pipefail +IFS=$'\n\t' -cd /opt/docker/forgejo -docker-compose down && docker-compose pull && docker-compose up -d >> /var/log/cron/update_forgejo.log +# ---------- Konfiguration ---------- +BASE_DIR="/opt/docker" # Verzeichnis mit allen Compose‑Projekten +LOG_DIR="/var/log/docker-update" # Ort für Log‑Dateien +COMPOSE_CMD="docker-compose" # docker‑compose v1 -cd /opt/docker/jellyfin -docker-compose down && docker-compose pull && docker-compose up -d >> /var/log/cron/update_jellyfin.log +# ---------- Hilfsfunktion ---------- +log() { + local lvl=${1:-INFO} + local msg=${2:-} + echo "$(date '+%Y-%m-%d %H:%M:%S') [$lvl] $msg" +} -cd /opt/docker/nextcloud -docker-compose down && docker-compose pull && docker-compose build && docker-compose up -d >> /var/log/cron/update_nextcloud +# ---------- Log‑Verzeichnis anlegen ---------- +mkdir -p "$LOG_DIR" -cd /opt/docker/vaultwarden -docker-compose down && docker-compose pull && docker-compose up -d >> /var/log/cron/update_vaultwarden +# ---------- Haupt‑Schleife ---------- +for proj_dir in "$BASE_DIR"/*/; do + # Compose‑Datei vorhanden? + if [[ -f "$proj_dir/docker-compose.yml" || -f "$proj_dir/docker-compose.yaml" ]]; then + pushd "$proj_dir" >/dev/null -docker image prune -a -f >> /var/log/cron/docker_prune.log + # ───── Log‑Datei für dieses Projekt ────────────────────────────────────── + # (ohne `local`, weil wir uns nicht in einer Funktion befinden) + log_file="${LOG_DIR}/$(basename "$proj_dir")-update.log" + + log "INFO" "Starte Update in ${proj_dir%/}" + echo "$(date '+%Y-%m-%d %H:%M:%S') [INFO] Update in ${proj_dir%/}" >> "$log_file" + + # ───── 1. Container herunterfahren ───────────────────────────────────────────── + $COMPOSE_CMD down >> "$log_file" 2>&1 || true + + # ───── 2. Images pullen ─────────────────────────────────────────────────────── + $COMPOSE_CMD pull >> "$log_file" 2>&1 + + # ───── 3. Container neu starten ─────────────────────────────────────────────── + $COMPOSE_CMD up -d >> "$log_file" 2>&1 + + popd >/dev/null + log "INFO" "Update für ${proj_dir%/} abgeschlossen." + else + log "INFO" "Keine docker-compose.yml in ${proj_dir%/} – überspringen." + fi +done + +log "INFO" "Alle Projekte wurden aktualisiert."