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
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