Explorer
/tmp/aa043-writer-loop.sh
← Zurück ↓ Download
#!/bin/bash
# AA-043 single writer: kontinuierlicher Loop statt 10-Min-Timer.
# Verarbeitet eligible aa043-Queue-Zeilen direkt hintereinander (Concurrency=1,
# Single-Writer-Instanz bleibt erhalten). Kein Busy-Loop: 15 s Poll bei leerer Queue.
DB=/opt/struktur/youtube-research/knowledge.db
WRITER=/opt/struktur/obsidian-graphiti-reconciler-staging/aa043_single_writer.py
MAX_CONSECUTIVE_ERRORS=5
errors=0
while true; do
  QID=$(sqlite3 "$DB" "select id from graphiti_import_queue where reconciliation_record_id like 'aa043:%' and graphiti_status in ('queued','retry_wait','lease_expired') order by id limit 1")
  if [ -z "$QID" ]; then
    sleep 15
    errors=0
    continue
  fi
  echo "$(date -u +%H:%M:%S) == processing queue $QID =="
  cd /opt/obsidian-vault
  if /usr/bin/python3 "$WRITER" --queue-id "$QID"; then
    errors=0
  else
    errors=$((errors+1))
    echo "queue $QID failed (consecutive errors: $errors)"
    if [ $errors -ge $MAX_CONSECUTIVE_ERRORS ]; then
      echo "too many consecutive errors, cooling down 300s"
      sleep 300
      errors=0
    fi
  fi
done