#!/bin/bash # Konfiguration laden source /usr/local/bin/sync-ispconfig-proxy.conf PROXY_CONF="/usr/local/bin/proxy_based_server.conf" # Standardeinstellungen DRY_RUN=true CONFIG_DIR="/etc/nginx/conf.d/proxy_generated" FILES_DELETED=false # Hilfe-Funktion show_help() { cat << EOF Nutzung: $(basename "$0") [OPTIONEN] Vergleicht lokale Nginx-Konfigurationen mit der ISPConfig-Datenbank. Entfernt verwaiste Dateien, sofern sie nicht in der Blocklist stehen. Optionen: -e, --execute Führt Löschvorgänge und Nginx-Reload tatsächlich aus. -h, --help Zeigt diese Hilfe an. EOF } # Parameter-Parsing while [[ "$#" -gt 0 ]]; do case $1 in -e|--execute) DRY_RUN=false ;; -h|--help) show_help; exit 0 ;; *) echo "Fehler: Unbekannte Option $1"; show_help; exit 1 ;; esac shift done if [ "$DRY_RUN" = true ]; then echo "--- DRY-RUN MODUS: Keine Änderungen am System ---" fi # 1. Blocklist extrahieren BLOCKLIST=$(sed -n '/^\[blocklist\]/,/^\[/p' "$PROXY_CONF" | grep -v '^\[' | grep -v '^#' | sed '/^$/d') # 2. Aktive Domains aus DB holen SQL_QUERY="SELECT domain FROM web_domain WHERE active = 'y';" DB_DOMAINS=$(mysql -h "$DB_HOST" -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" -Bse "$SQL_QUERY") if [ $? -ne 0 ]; then echo "Fehler: Datenbankverbindung fehlgeschlagen." exit 1 fi # 3. Cleanup-Schleife for file in "$CONFIG_DIR"/*.conf; do [ -e "$file" ] || continue filename=$(basename "$file" .conf) # Blocklist Check if echo "$BLOCKLIST" | grep -qxw "$filename"; then continue fi # DB Check if ! echo "$DB_DOMAINS" | grep -qxw "$filename"; then if [ "$DRY_RUN" = true ]; then echo "[Simuliert] Lösche: $file" FILES_DELETED=true else echo "Lösche veraltete Config: $file" rm "$file" FILES_DELETED=true fi fi done # 4. Bedingter Nginx Reload if [ "$FILES_DELETED" = true ]; then if [ "$DRY_RUN" = true ]; then echo "[Simuliert] Änderungen gefunden: nginx -t && systemctl reload nginx" else echo "Änderungen vorgenommen. Prüfe Nginx Syntax..." if nginx -t; then systemctl reload nginx echo "Nginx erfolgreich neu geladen." else echo "Fehler in Nginx-Konfiguration! Reload abgebrochen." exit 1 fi fi else echo "Keine verwaisten Dateien gefunden. Kein Reload notwendig." fi