added auto update after initail qlc start with auto close and restart of qlc

This commit is contained in:
2025-12-05 01:29:19 +01:00
parent 6655d171be
commit 241d4decfc

View File

@ -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."
else
echo "WARNUNG: git pull fehlgeschlagen (offline? Auth-Problem?)."
echo "Benutze bestehende lokale Dateien weiter."
fi
else
echo "Fehler: Repo-Verzeichnis $REPO_DIR existiert nicht."
fi
BEFORE_COMMIT="$(git rev-parse HEAD 2>/dev/null || echo "")"
# 2) Fixtures vom Repo in ~/.qlcplus/fixtures kopieren
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 "Aktualisiere Fixtures ..."
echo "$(date): [updater] Aktualisiere Fixtures von $FIXTURES_SRC nach $FIXTURES_DST ..." >> "$LOGFILE" 2>&1
mkdir -p "$FIXTURES_DST"
# gesamter Inhalt von Fixtures nach ~/.qlcplus/fixtures
cp -a "$FIXTURES_SRC"/. "$FIXTURES_DST"/
echo "Fixtures aktualisiert."
echo "$(date): [updater] Fixtures aktualisiert." >> "$LOGFILE" 2>&1
else
echo "WARNUNG: Fixtures-Ordner $FIXTURES_SRC existiert nicht."
echo "$(date): [updater] WARNUNG: Fixtures-Ordner $FIXTURES_SRC existiert nicht." >> "$LOGFILE" 2>&1
fi
# 3) QLC+ mit dem Projekt aus dem Repo starten
echo "Starte QLC+ mit Projektdatei: $PROJECT_FILE"
# 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
# WICHTIG: Kein & hier das Skript wird selbst im Autostart im Hintergrund gestartet
qlcplus --web --operate -o "$PROJECT_FILE"
# 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
echo "QLC+ wurde beendet (oder Start fehlgeschlagen)."
} >> "$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