diff --git a/Kapitel 13/Tutorial.md b/Kapitel 13/Tutorial.md index 45e18bb..6c6da0a 100644 --- a/Kapitel 13/Tutorial.md +++ b/Kapitel 13/Tutorial.md @@ -604,67 +604,95 @@ In diesem Schritt erstellen wir den eigentlichen Workflow in **n8n**. Er sorgt d ```bash #!/usr/bin/env bash -# /srv/clipper/bin/cleanup -# Clipper-Cleanup: Archiviert VODs, lädt sie via SFTP hoch und räumt alte Daten auf + # /srv/clipper/bin/cleanup + # Cleanup für eine einzelne VOD_ID: Archivieren, Upload via SFTP, gezieltes Löschen -set -euo pipefail + set -euo pipefail -# ------------------------------- -# .env einbinden -# ------------------------------- -ENV_FILE="/etc/clipper.env" -[[ -f "$ENV_FILE" ]] || { echo "❌ .env fehlt: $ENV_FILE" >&2; exit 1; } -# shellcheck disable=SC1090 -source "$ENV_FILE" + # ------------------------------- + # Argument prüfen (VOD_ID) + # ------------------------------- + VOD_ID="${1:?❌ VOD_ID fehlt beim Aufruf. Syntax: cleanup VOD123}" -# TMP → konsistente Benennung -CLIPPER_TEMP="${CLIPPER_TMP:?CLIPPER_TMP fehlt in .env}" + # ------------------------------- + # .env einbinden + # ------------------------------- + ENV_FILE="/etc/clipper.env" + [[ -f "$ENV_FILE" ]] || { echo "❌ .env fehlt: $ENV_FILE" >&2; exit 1; } + # shellcheck disable=SC1090 + source "$ENV_FILE" -# ------------------------------- -# Logging vorbereiten -# ------------------------------- -TODAY="$(date +%F)" -LOGFILE="${CLIPPER_LOG}/clipper_cleanup_${TODAY}.log" -exec > >(tee -a "$LOGFILE") 2>&1 + # TMP konsistent benennen + CLIPPER_TEMP="${CLIPPER_TMP:?CLIPPER_TMP fehlt in .env}" -echo "===== 🧹 Starte Cleanup: $TODAY =====" + # ------------------------------- + # Logging vorbereiten + # ------------------------------- + TODAY="$(date +%F)" + LOGFILE="${CLIPPER_LOG}/clipper_cleanup_${VOD_ID}_${TODAY}.log" + exec > >(tee -a "$LOGFILE") 2>&1 -# ------------------------------- -# Alle VOD-Ordner in OUT verarbeiten -# ------------------------------- -for VOD_DIR in "${CLIPPER_OUT}"/*/; do - [[ -d "$VOD_DIR" ]] || continue + echo "===== 🧹 Starte Cleanup für VOD: $VOD_ID – $TODAY =====" - VOD_ID="$(basename "$VOD_DIR")" + # ------------------------------- + # Archiv erstellen + # ------------------------------- + OUT_DIR="${CLIPPER_OUT}/${VOD_ID}" ARCHIVE_PATH="${CLIPPER_OUT}/${VOD_ID}.tar.gz" - echo "📦 Erstelle Archiv für VOD: $VOD_ID" - tar -czf "$ARCHIVE_PATH" -C "$CLIPPER_OUT" "$VOD_ID" - - echo "🔼 Lade Archiv nach NC (SFTP): ${ARCHIVE_PATH} → ${SFTP_DROP_BASE}/${VOD_ID}.tar.gz" - sftp -i "$SFTP_KEY" -P "$SFTP_PORT" -oStrictHostKeyChecking=no "$SFTP_USER@$SFTP_HOST" < 30 )); then + echo "🧹 Entferne LOGS (älter als 30 Tage): $LOG_DIR" + rm -rf "$LOG_DIR" + else + echo "ℹ️ LOG-Verzeichnis ist nur $AGE_DAYS Tage alt – wird behalten." + fi + else + echo "ℹ️ Kein LOG-Verzeichnis vorhanden." + fi + + echo "✅ Cleanup abgeschlossen für VOD: $VOD_ID" ``` Wie zuvor auch, muss auch dieses Skript wieder die richtigen Berechtigungen zugewiesen bekommen. @@ -819,7 +847,17 @@ echo "🎉 Cleanup abgeschlossen: $TODAY" /bin/clipper-vod-get "{{$('Merge').item.json.data.id}}" "{{ $json.url || ('https://www.twitch.tv/videos/' + $('Merge').item.json.data.id) }}" ``` -13. **SSH Node 3 – Finalize** (Node-Name: Finalize VOD) + 12. **SSH Node 3 – Upload ** (Node-Name: `Up`) + - **Node-Typ:** SSH + - **Credentials:** *SSH Clipper* + - **Operation:** Execute Command + - **Command is an Expression:** **ON** + - **Command:** + ```bash + /bin/clenaup "{{$('Merge').item.json.data.id}}" "{{ $json.url || ('https://www.twitch.tv/videos/' + $('Merge').item.json.data.id) }}" + ``` + +14. **SSH Node 4 – Finalize** (Node-Name: Finalize VOD) - Node-Typ: SSH - Credentials: SSH Nextcloud (nc_runner) - Operation: Execute Command