Files
KlugesEck-light-show/start_klugeseck.sh

102 lines
3.8 KiB
Bash
Executable File

#!/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