Paperless-ngx auf Proxmox LXC mit CIFS/NAS: consume-Ordner wird nicht automatisch eingelesen – Lösung

RMPERS

New Member
Aug 19, 2026
1
0
1
er betreibt und den consume-Ordner über einen CIFS/SMB-Mount (z.B. Synology NAS) per Bind-Mount in den Container reicht, hat folgendes Problem: Neue Dateien im consume-Ordner werden vom document_consumer nicht automatisch erkannt – auch nicht mit gesetztem PAPERLESS_CONSUMER_POLLING_INTERVAL.


Ursache


Der document_consumer nutzt die Python-Bibliothek watchdog für das Polling. Bei CIFS-Mounts, die per Bind-Mount in einen LXC-Container gereicht werden, liefert watchdog eine veraltete Verzeichnis-Sicht (Attribut-Caching des laufenden Prozesses). Ein Neustart des Containers oder des Services behebt das Problem kurzzeitig (Dateien beim Start werden erkannt), neue Dateien danach jedoch nicht.


Lösung


Statt auf den eingebauten Watcher zu setzen, wird ein Python-Script per Cronjob minütlich aufgerufen, das die Paperless-API direkt aufruft:


1. fstab auf dem Proxmox-Host (wichtig: nounix,noperm,uid=0,gid=0,file_mode=0777,dir_mode=0777):



//NAS-IP/share /mnt/mountpoint cifs credentials=/etc/samba/creds,vers=3.0,uid=0,gid=0,file_mode=0777,dir_mode=0777,noperm,x-systemd.automount,x-systemd.requires=network-online.target,nofail 0 0

2. Script /usr/local/bin/paperless-consume.py:



python
import django, os, pathlib, sys

conf_path = pathlib.Path('/opt/paperless/paperless.conf')
if conf_path.exists():
for line in conf_path.read_text().splitlines():
line = line.strip()
if line and not line.startswith('#') and '=' in line:
key, _, val = line.partition('=')
os.environ.setdefault(key.strip(), val.strip())

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'paperless.settings')
sys.path.insert(0, '/opt/paperless/src')
django.setup()

from documents.data_models import ConsumableDocument, DocumentSource
from documents.tasks import consume_file

consume_dir = pathlib.Path('/opt/paperless_data/consume')
for f in consume_dir.iterdir():
if f.is_file() and not f.name.startswith('.'):
consume_file(ConsumableDocument(
source=DocumentSource.ConsumeFolder,
original_file=f,
))

3. Crontab (sudo crontab -e):



* * * * * /opt/paperless/.venv/bin/python3 /usr/local/bin/paperless-consume.py >> /var/log/paperless-consume.log 2>&1

4. Den paperless-consumer-Service deaktivieren (wird nicht mehr benötigt):



bash
sudo systemctl stop paperless-consumer
sudo systemctl disable paperless-consumer
bitte verschieben, wenn falsch und nicht steinigen ist mein erster post, andere workarounds haben nicht geholfen
 
Danke fürs Aufschreiben, aber ich glaub die Ursache ist ne andere: die Variable heißt PAPERLESS_CONSUMER_POLLING (Wert in Sekunden), nicht PAPERLESS_CONSUMER_POLLING_INTERVAL. Mit dem falschen Namen wird die Option einfach ignoriert, watchdog bleibt im inotify-Modus, und inotify feuert über CIFS nie, weil die Änderungen am NAS passieren und der Client davon nichts mitbekommt. Dazu noch PAPERLESS_CONSUMER_POLLING_RETRY_COUNT und PAPERLESS_CONSUMER_POLLING_DELAY etwas hochdrehen, sonst greift er sich große PDFs, die noch geschrieben werden, und bricht ab.

Beim Start vom paperless-consumer steht übrigens im Log, ob er im Polling- oder inotify-Modus läuft, das ist der schnellste Check. Würd ich probieren, bevor du den Consumer ganz rauswirfst. Dein Cron-Script umgeht ja auch das Duplicate- und Retry-Handling von paperless.
 
  • Like
Reactions: Johannes S