Kapitel 13/Tutorial.md aktualisiert

This commit is contained in:
2025-09-23 18:22:33 +00:00
parent 0fa25b4abd
commit 56e7ffa133

View File

@@ -605,7 +605,8 @@ In diesem Schritt erstellen wir den eigentlichen Workflow in **n8n**. Er sorgt d
```bash ```bash
#!/usr/bin/env bash #!/usr/bin/env bash
# /srv/clipper/bin/cleanup # /srv/clipper/bin/cleanup
# Cleanup für eine einzelne VOD_ID: Archivieren, Upload via SFTP, gezieltes Löschen # Clipper-Cleanup für eine einzelne VOD_ID:
# Erstellt Archiv, lädt es via SFTP hoch, löscht OUT und TEMP immer, LOGS nur wenn älter als 30 Tage
set -euo pipefail set -euo pipefail
@@ -629,43 +630,59 @@ In diesem Schritt erstellen wir den eigentlichen Workflow in **n8n**. Er sorgt d
# Logging vorbereiten # Logging vorbereiten
# ------------------------------- # -------------------------------
TODAY="$(date +%F)" TODAY="$(date +%F)"
LOGFILE="${CLIPPER_LOG}/clipper_cleanup_${VOD_ID}_${TODAY}.log" LOG_DIR="${CLIPPER_LOG}/${VOD_ID}"
mkdir -p "$LOG_DIR"
LOGFILE="${LOG_DIR}/clipper_cleanup_${TODAY}.log"
exec > >(tee -a "$LOGFILE") 2>&1 exec > >(tee -a "$LOGFILE") 2>&1
echo "===== 🧹 Starte Cleanup für VOD: $VOD_ID $TODAY =====" echo "===== 🧹 Starte Cleanup für VOD: $VOD_ID $TODAY ====="
# ------------------------------- # -------------------------------
# Archiv erstellen # Pfade definieren
# ------------------------------- # -------------------------------
OUT_DIR="${CLIPPER_OUT}/${VOD_ID}" OUT_DIR="${CLIPPER_OUT}/${VOD_ID}"
ARCHIVE_PATH="${CLIPPER_OUT}/${VOD_ID}.tar.gz" TEMP_DIR="${CLIPPER_TEMP}/${VOD_ID}"
LOG_VOD_DIR="${CLIPPER_LOG}/${VOD_ID}"
ARCHIVE_TEMP_PATH="${CLIPPER_OUT}/${VOD_ID}.tar.gz"
ARCHIVE_FINAL_PATH="${OUT_DIR}/${VOD_ID}.tar.gz"
# -------------------------------
# Archiv erstellen (außerhalb, dann verschieben)
# -------------------------------
if [[ -d "$OUT_DIR" ]]; then if [[ -d "$OUT_DIR" ]]; then
echo "📦 Erstelle Archiv aus: $OUT_DIR" echo "📦 Erstelle temporäres Archiv (ohne Selbstreferenz): $ARCHIVE_TEMP_PATH"
tar -czf "$ARCHIVE_PATH" -C "$CLIPPER_OUT" "$VOD_ID" tar -czf "$ARCHIVE_TEMP_PATH" -C "$CLIPPER_OUT" "$VOD_ID"
echo "📂 Verschiebe Archiv in VOD-Ordner: $ARCHIVE_FINAL_PATH"
mv "$ARCHIVE_TEMP_PATH" "$ARCHIVE_FINAL_PATH"
else else
echo "⚠️ OUT-Verzeichnis fehlt: $OUT_DIR" echo "⚠️ OUT-Verzeichnis fehlt: $OUT_DIR"
exit 2 exit 2
fi fi
# ------------------------------- # -------------------------------
# SFTP-Upload # Archiv hochladen per SFTP
# ------------------------------- # -------------------------------
echo "🔼 Lade Archiv nach: ${SFTP_DROP_BASE}/${VOD_ID}.tar.gz" echo "🔼 Lade Archiv hoch: ${SFTP_DROP_BASE}/${VOD_ID}.tar.gz"
sftp -i "$SFTP_KEY" -P "$SFTP_PORT" -oStrictHostKeyChecking=no "$SFTP_USER@$SFTP_HOST" <<EOF sftp -i "$SFTP_KEY" -P "$SFTP_PORT" -oStrictHostKeyChecking=no "$SFTP_USER@$SFTP_HOST" <<EOF
put "$ARCHIVE_PATH" "${SFTP_DROP_BASE}/${VOD_ID}.tar.gz" put "$ARCHIVE_FINAL_PATH" "${SFTP_DROP_BASE}/${VOD_ID}.tar.gz"
EOF EOF
# ------------------------------- # -------------------------------
# OUT löschen # Archiv lokal löschen nach erfolgreichem Upload
# -------------------------------
echo "🗑️ Lösche Archiv im VOD-Ordner: $ARCHIVE_FINAL_PATH"
rm -f "$ARCHIVE_FINAL_PATH"
# -------------------------------
# OUT-Verzeichnis löschen
# ------------------------------- # -------------------------------
echo "🧹 Entferne OUT: $OUT_DIR" echo "🧹 Entferne OUT: $OUT_DIR"
rm -rf "$OUT_DIR" rm -rf "$OUT_DIR"
# ------------------------------- # -------------------------------
# TEMP löschen (sofern vorhanden) # TEMP-Verzeichnis löschen (falls vorhanden)
# ------------------------------- # -------------------------------
TEMP_DIR="${CLIPPER_TEMP}/${VOD_ID}"
if [[ -d "$TEMP_DIR" ]]; then if [[ -d "$TEMP_DIR" ]]; then
echo "🧹 Entferne TEMP: $TEMP_DIR" echo "🧹 Entferne TEMP: $TEMP_DIR"
rm -rf "$TEMP_DIR" rm -rf "$TEMP_DIR"
@@ -676,20 +693,19 @@ In diesem Schritt erstellen wir den eigentlichen Workflow in **n8n**. Er sorgt d
# ------------------------------- # -------------------------------
# LOGS nur löschen, wenn älter als 30 Tage # LOGS nur löschen, wenn älter als 30 Tage
# ------------------------------- # -------------------------------
LOG_DIR="${CLIPPER_LOG}/${VOD_ID}" if [[ -d "$LOG_VOD_DIR" ]]; then
if [[ -d "$LOG_DIR" ]]; then LAST_CHANGE=$(find "$LOG_VOD_DIR" -type f -printf "%T@\\n" | sort -n | tail -1 || echo 0)
LAST_CHANGE=$(find "$LOG_DIR" -type f -printf "%T@\\n" | sort -n | tail -1)
NOW=$(date +%s) NOW=$(date +%s)
AGE_DAYS=$(( (NOW - ${LAST_CHANGE%.*}) / 86400 )) AGE_DAYS=$(( (NOW - ${LAST_CHANGE%.*}) / 86400 ))
if (( AGE_DAYS > 30 )); then if (( AGE_DAYS > 30 )); then
echo "🧹 Entferne LOGS (älter als 30 Tage): $LOG_DIR" echo "🧹 Entferne LOGS (älter als 30 Tage): $LOG_VOD_DIR"
rm -rf "$LOG_DIR" rm -rf "$LOG_VOD_DIR"
else else
echo " LOG-Verzeichnis ist nur $AGE_DAYS Tage alt wird behalten." echo " LOG-Verzeichnis ist nur $AGE_DAYS Tage alt wird behalten."
fi fi
else else
echo " Kein LOG-Verzeichnis vorhanden." echo " Kein LOG-Verzeichnis vorhanden für VOD: $VOD_ID"
fi fi
echo "✅ Cleanup abgeschlossen für VOD: $VOD_ID" echo "✅ Cleanup abgeschlossen für VOD: $VOD_ID"