From 241d4decfcb9ec1258173b95d7e036a33a0206b7 Mon Sep 17 00:00:00 2001 From: Alexander Schulz Date: Fri, 5 Dec 2025 01:29:19 +0100 Subject: [PATCH] added auto update after initail qlc start with auto close and restart of qlc --- start_klugeseck.sh | 109 +++++++++++++++++++++++++++++++++------------ 1 file changed, 80 insertions(+), 29 deletions(-) diff --git a/start_klugeseck.sh b/start_klugeseck.sh index 8bdf3d3..3a2e98b 100755 --- a/start_klugeseck.sh +++ b/start_klugeseck.sh @@ -1,6 +1,13 @@ #!/usr/bin/env bash -# kleines Autostart-Skript für QLC+ Show "KlugesEck" +# 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" @@ -8,44 +15,88 @@ 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 - # 1) Ins Repo wechseln und git pull - if [ -d "$REPO_DIR" ]; then cd "$REPO_DIR" || { - echo "Fehler: Kann nicht ins Repo-Verzeichnis wechseln." + echo "$(date): [updater] FEHLER: Konnte nicht ins Repo-Verzeichnis wechseln." >> "$LOGFILE" 2>&1 + break } - echo "Führe git pull aus ..." - if git pull --ff-only; then - echo "git pull erfolgreich." + 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 - echo "WARNUNG: git pull fehlgeschlagen (offline? Auth-Problem?)." - echo "Benutze bestehende lokale Dateien weiter." + 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 - else - echo "Fehler: Repo-Verzeichnis $REPO_DIR existiert nicht." - fi - # 2) Fixtures vom Repo in ~/.qlcplus/fixtures kopieren - if [ -d "$FIXTURES_SRC" ]; then - echo "Aktualisiere Fixtures ..." - mkdir -p "$FIXTURES_DST" - # gesamter Inhalt von Fixtures nach ~/.qlcplus/fixtures - cp -a "$FIXTURES_SRC"/. "$FIXTURES_DST"/ - echo "Fixtures aktualisiert." - else - echo "WARNUNG: Fixtures-Ordner $FIXTURES_SRC existiert nicht." - fi + attempt=$((attempt + 1)) - # 3) QLC+ mit dem Projekt aus dem Repo starten - echo "Starte QLC+ mit Projektdatei: $PROJECT_FILE" + 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 +) & - # WICHTIG: Kein & hier – das Skript wird selbst im Autostart im Hintergrund gestartet - qlcplus --web --operate -o "$PROJECT_FILE" - - echo "QLC+ wurde beendet (oder Start fehlgeschlagen)." -} >> "$LOGFILE" 2>&1 \ No newline at end of file +exit 0 \ No newline at end of file