102 lines
3.8 KiB
Bash
Executable File
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 |