Kapitel 13/Tutorial.md aktualisiert

This commit is contained in:
2025-09-23 18:00:37 +00:00
parent 8464a7730d
commit 55b7b6aa3b

View File

@@ -605,10 +605,15 @@ 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
# Clipper-Cleanup: Archiviert VODs, lädt sie via SFTP hoch und räumt alte Daten auf # Cleanup für eine einzelne VOD_ID: Archivieren, Upload via SFTP, gezieltes Löschen
set -euo pipefail set -euo pipefail
# -------------------------------
# Argument prüfen (VOD_ID)
# -------------------------------
VOD_ID="${1:?❌ VOD_ID fehlt beim Aufruf. Syntax: cleanup VOD123}"
# ------------------------------- # -------------------------------
# .env einbinden # .env einbinden
# ------------------------------- # -------------------------------
@@ -617,54 +622,77 @@ ENV_FILE="/etc/clipper.env"
# shellcheck disable=SC1090 # shellcheck disable=SC1090
source "$ENV_FILE" source "$ENV_FILE"
# TMP konsistente Benennung # TMP konsistent benennen
CLIPPER_TEMP="${CLIPPER_TMP:?CLIPPER_TMP fehlt in .env}" CLIPPER_TEMP="${CLIPPER_TMP:?CLIPPER_TMP fehlt in .env}"
# ------------------------------- # -------------------------------
# Logging vorbereiten # Logging vorbereiten
# ------------------------------- # -------------------------------
TODAY="$(date +%F)" TODAY="$(date +%F)"
LOGFILE="${CLIPPER_LOG}/clipper_cleanup_${TODAY}.log" LOGFILE="${CLIPPER_LOG}/clipper_cleanup_${VOD_ID}_${TODAY}.log"
exec > >(tee -a "$LOGFILE") 2>&1 exec > >(tee -a "$LOGFILE") 2>&1
echo "===== 🧹 Starte Cleanup: $TODAY =====" echo "===== 🧹 Starte Cleanup für VOD: $VOD_ID $TODAY ====="
# ------------------------------- # -------------------------------
# Alle VOD-Ordner in OUT verarbeiten # Archiv erstellen
# ------------------------------- # -------------------------------
for VOD_DIR in "${CLIPPER_OUT}"/*/; do OUT_DIR="${CLIPPER_OUT}/${VOD_ID}"
[[ -d "$VOD_DIR" ]] || continue
VOD_ID="$(basename "$VOD_DIR")"
ARCHIVE_PATH="${CLIPPER_OUT}/${VOD_ID}.tar.gz" ARCHIVE_PATH="${CLIPPER_OUT}/${VOD_ID}.tar.gz"
echo "📦 Erstelle Archiv für VOD: $VOD_ID" if [[ -d "$OUT_DIR" ]]; then
echo "📦 Erstelle Archiv aus: $OUT_DIR"
tar -czf "$ARCHIVE_PATH" -C "$CLIPPER_OUT" "$VOD_ID" tar -czf "$ARCHIVE_PATH" -C "$CLIPPER_OUT" "$VOD_ID"
else
echo "⚠️ OUT-Verzeichnis fehlt: $OUT_DIR"
exit 2
fi
echo "🔼 Lade Archiv nach NC (SFTP): ${ARCHIVE_PATH} → ${SFTP_DROP_BASE}/${VOD_ID}.tar.gz" # -------------------------------
# SFTP-Upload
# -------------------------------
echo "🔼 Lade Archiv nach: ${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_PATH" "${SFTP_DROP_BASE}/${VOD_ID}.tar.gz"
EOF EOF
echo "🧹 Entferne OUT-Ordner: $VOD_DIR" # -------------------------------
rm -rf "$VOD_DIR" # OUT löschen
# -------------------------------
echo "🧹 Entferne OUT: $OUT_DIR"
rm -rf "$OUT_DIR"
# -------------------------------
# TEMP löschen (sofern vorhanden)
# -------------------------------
TEMP_DIR="${CLIPPER_TEMP}/${VOD_ID}" TEMP_DIR="${CLIPPER_TEMP}/${VOD_ID}"
if [[ -d "$TEMP_DIR" ]]; then if [[ -d "$TEMP_DIR" ]]; then
echo "🧹 Entferne TEMP-Ordner: $TEMP_DIR" echo "🧹 Entferne TEMP: $TEMP_DIR"
rm -rf "$TEMP_DIR" rm -rf "$TEMP_DIR"
else
echo " Kein TEMP-Verzeichnis vorhanden."
fi fi
echo "✅ Fertig mit VOD: $VOD_ID"
done
# ------------------------------- # -------------------------------
# Logs aufräumen (älter als 30 Tage) # LOGS nur löschen, wenn älter als 30 Tage
# ------------------------------- # -------------------------------
echo "🧹 Entferne alte Logs in: $CLIPPER_LOG" LOG_DIR="${CLIPPER_LOG}/${VOD_ID}"
find "$CLIPPER_LOG" -type f -name "clipper_cleanup_*.log" -mtime +30 -print -delete if [[ -d "$LOG_DIR" ]]; then
LAST_CHANGE=$(find "$LOG_DIR" -type f -printf "%T@\\n" | sort -n | tail -1)
NOW=$(date +%s)
AGE_DAYS=$(( (NOW - ${LAST_CHANGE%.*}) / 86400 ))
echo "🎉 Cleanup abgeschlossen: $TODAY" if (( AGE_DAYS > 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. Wie zuvor auch, muss auch dieses Skript wieder die richtigen Berechtigungen zugewiesen bekommen.
@@ -819,7 +847,17 @@ echo "🎉 Cleanup abgeschlossen: $TODAY"
<clipper-ordner>/bin/clipper-vod-get "{{$('Merge').item.json.data.id}}" "{{ $json.url || ('https://www.twitch.tv/videos/' + $('Merge').item.json.data.id) }}" <clipper-ordner>/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
<clipper-ordner>/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 - Node-Typ: SSH
- Credentials: SSH Nextcloud (nc_runner) - Credentials: SSH Nextcloud (nc_runner)
- Operation: Execute Command - Operation: Execute Command