#!/usr/bin/env bash # Autostart-Skript für QLC+ "Kluges Eck" # Strategie: # 1) QLC+ sofort starten (Licht geht sofort an) # 2) Im Hintergrund mehrfach git pull versuchen # 3) Wenn sich HEAD ändert: # - Fixtures kopieren # - QLC+ beenden # - QLC+ mit neuer Datei neu starten REPO_DIR="/home/alxs/Dokumente/KlugesEck-light-show" PROJECT_FILE="$REPO_DIR/KlugesEckV1.qxw" FIXTURES_SRC="$REPO_DIR/Fixtures" FIXTURES_DST="/home/alxs/.qlcplus/fixtures" LOGFILE="/home/alxs/qlc-autostart.log" MAX_PULL_ATTEMPTS=2 # wie oft nach dem Start versuchen zu pullen PULL_DELAY_SECONDS=30 # Sekunden Pause zwischen den Versuchen { echo "==============================" echo "$(date): Starte KlugesEck-Autostart-Skript" echo "Repo: $REPO_DIR" echo "Projektdatei: $PROJECT_FILE" } >> "$LOGFILE" 2>&1 # 1) QLC+ sofort starten (nicht blockierend) qlcplus --web --operate -o "$PROJECT_FILE" >> "$LOGFILE" 2>&1 & QLC_PID=$! echo "$(date): QLC+ gestartet, PID=${QLC_PID}" >> "$LOGFILE" 2>&1 # 2) Hintergrund-Update-Job ( attempt=1 while [ "$attempt" -le "$MAX_PULL_ATTEMPTS" ]; do echo "$(date): [updater] Pull-Versuch $attempt von $MAX_PULL_ATTEMPTS" >> "$LOGFILE" 2>&1 if [ ! -d "$REPO_DIR" ]; then echo "$(date): [updater] FEHLER: Repo-Verzeichnis $REPO_DIR existiert nicht." >> "$LOGFILE" 2>&1 break fi cd "$REPO_DIR" || { echo "$(date): [updater] FEHLER: Konnte nicht ins Repo-Verzeichnis wechseln." >> "$LOGFILE" 2>&1 break } BEFORE_COMMIT="$(git rev-parse HEAD 2>/dev/null || echo "")" if ! git pull --ff-only >> "$LOGFILE" 2>&1; then echo "$(date): [updater] WARNUNG: git pull fehlgeschlagen (offline? Auth-Problem?)." >> "$LOGFILE" 2>&1 else AFTER_COMMIT="$(git rev-parse HEAD 2>/dev/null || echo "")" if [ -n "$BEFORE_COMMIT" ] && [ -n "$AFTER_COMMIT" ] && [ "$BEFORE_COMMIT" != "$AFTER_COMMIT" ]; then echo "$(date): [updater] Repo wurde aktualisiert (HEAD hat sich geändert)." >> "$LOGFILE" 2>&1 # Fixtures aktualisieren if [ -d "$FIXTURES_SRC" ]; then echo "$(date): [updater] Aktualisiere Fixtures von $FIXTURES_SRC nach $FIXTURES_DST ..." >> "$LOGFILE" 2>&1 mkdir -p "$FIXTURES_DST" cp -a "$FIXTURES_SRC"/. "$FIXTURES_DST"/ echo "$(date): [updater] Fixtures aktualisiert." >> "$LOGFILE" 2>&1 else echo "$(date): [updater] WARNUNG: Fixtures-Ordner $FIXTURES_SRC existiert nicht." >> "$LOGFILE" 2>&1 fi # QLC+ beenden (falls noch läuft) if [ -n "$QLC_PID" ] && kill -0 "$QLC_PID" 2>/dev/null; then echo "$(date): [updater] Beende QLC+ (PID=$QLC_PID) für Neustart mit aktualisiertem Projekt." >> "$LOGFILE" 2>&1 kill "$QLC_PID" 2>/dev/null # optional: kurz warten, damit QLC sauber schließen kann sleep 2 else echo "$(date): [updater] Hinweis: QLC+ läuft nicht mehr (PID=$QLC_PID nicht aktiv)." >> "$LOGFILE" 2>&1 fi # QLC+ mit aktualisiertem Projekt neu starten echo "$(date): [updater] Starte QLC+ mit aktualisierter Projektdatei." >> "$LOGFILE" 2>&1 qlcplus --web --operate -o "$PROJECT_FILE" >> "$LOGFILE" 2>&1 & echo "$(date): [updater] QLC+ wurde neu gestartet." >> "$LOGFILE" 2>&1 # Nach erfolgreichem Update & Neustart nicht weiter versuchen break else echo "$(date): [updater] Repo ist bereits aktuell (kein HEAD-Change)." >> "$LOGFILE" 2>&1 fi fi attempt=$((attempt + 1)) if [ "$attempt" -le "$MAX_PULL_ATTEMPTS" ]; then echo "$(date): [updater] Warte $PULL_DELAY_SECONDS Sekunden bis zum nächsten Pull-Versuch." >> "$LOGFILE" 2>&1 sleep "$PULL_DELAY_SECONDS" else echo "$(date): [updater] Maximale Anzahl Pull-Versuche erreicht. Beende Updater." >> "$LOGFILE" 2>&1 fi done ) & exit 0