Spielt man ein bisschen mit den Workflows „Arbeitsabläufen“ in paperless-ngx, kann es passieren, dass man versehentlich viele Webhook-Calls generiert, indem man z. B. für seine gesamte Dokumentensammlung Webhooks durch den Auslöser „Geplant“ auslöst, die dann allesamt in der nachgelagerten Redis-Datenbank feststecken und unter Umständen nur noch sehr langsam oder gar nicht mehr abgearbeitet werden, weil die externe API, welcher der Webhook-Call galt, nicht mehr mitmacht.
Eine pragmatische Lösung dazu ist, die gesamte Warteschlange an wartenden Webhook-Calls zu entfernen. Im Docker-basierten paperless-ngx ginge das wie folgt:
docker exec -ti paperless-webserver-1 bash
python3 - <<'PYCODE'
import redis, json
r = redis.Redis(host="broker", port=6379, db=0) # adjust host if needed
queue = "celery" # replace if your queue is named differently
tasks = r.lrange(queue, 0, 500)
removed = 0
for t in tasks:
try:
data = json.loads(t)
if data.get("headers", {}).get("task") == "documents.signals.handlers.send_webhook":
r.lrem(queue, 0, t)
removed += 1
except Exception:
# some entries may not be JSON
continue
print(f"Removed {removed} webhook tasks from queue '{queue}'")
PYCODE
Das Script löscht jeweils nur die Webhook-Warteschlangendaten und davon immer nur 500. Bei zu langen Anfragen schloss Redis die Verbindung unerwartet. Es empfiehlt sich daher, das Script mehrfach zu starten bis die Warteschlange wieder leer ist.