added auto update after initail qlc start with auto close and restart of qlc
This commit is contained in:
@ -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
|
||||
Reference in New Issue
Block a user