# /etc/cron.d/archivmail # # Zentrale Cron-Datei für archivmail — analog zum mailpiler-Vorbild # (/etc/cron.d/piler), das ebenfalls alle Wartungs-Jobs in einer Datei # bündelt. Neue Jobs (Purge, nächtlicher Reindex, Watch-Folder-Import, ...) # kommen hier als weitere Zeile dazu, statt eigene cron.d-Dateien # anzulegen. # # Format: Minute Stunde Tag Monat Wochentag User Befehl # ── OCR-Pausenfenster (PROJ-56) ────────────────────────────────────────── # Steuert paused_hours in /etc/archivmail/config.yml und löst per # "systemctl reload" (SIGHUP) einen Reload aus, damit die neue Pausenzeit # sofort greift — ohne den Prozess neu zu starten (kein Verbindungsabbruch # für SMTP/IMAP/API). Mails gehen dabei nie verloren: ocr_status='pending' # bleibt in der DB bestehen und wird von der Backfill-Goroutine laufend # nachgezogen, unabhängig von Pausen oder Neustarts. # # Anpassen: einfach die beiden Uhrzeiten unten ändern und an die # crontab-Syntax halten. Bei wrap-around Fenstern (z.B. 22:00–06:00) # "start" auf den späteren, "stop" auf den früheren Zeitpunkt legen. # Pause starten um 22:00 Uhr 0 22 * * * root /usr/local/bin/archivmail-ocr-pause.sh start 22 6 # Pause beenden um 06:00 Uhr 0 6 * * * root /usr/local/bin/archivmail-ocr-pause.sh stop # ── GoBD-Retention-Purge (PROJ-56c) ───────────────────────────────────── # Löscht Mails mit abgelaufener Aufbewahrungsfrist (retain_until < NOW()), # entfernt sie aus dem Suchindex und schreibt pro Mail einen Audit-Eintrag # ("mail_purged") — analog zu Pilers purge.sh, nachts um 03:40 Uhr. 40 3 * * * root /opt/archivmail/archivmail purge --config /etc/archivmail/config.yml >> /var/log/archivmail/purge.log 2>&1 # ── Batch-Modus: Indexierung + OCR per Cron (PROJ-58) ─────────────────── # NUR relevant, wenn in /etc/archivmail/config.yml index.batch_mode: true # bzw. ocr.batch_mode: true gesetzt ist. In diesem Modus startet der Daemon # den jeweiligen Dauerbetrieb-Worker NICHT — neue Mails bleiben mit # indexed_at IS NULL bzw. ocr_status='pending' in der DB stehen und werden # erst vom nächsten Cron-Lauf hier durchsuchbar / OCR-verarbeitet gemacht. # Sinn: viele kleine Schreibzugriffe (Manticore, tesseract, DB) werden zu # geblockten Batches gebündelt, statt sofort bei jedem Mail-Import zu laufen. # # Bei index.batch_mode: false / ocr.batch_mode: false (Default) sind diese # beiden Zeilen WIRKUNGSLOS bzw. redundant — der Worker läuft dann ohnehin # dauerhaft und arbeitet alles sofort ab. Wer batch_mode nicht nutzt, kann # die beiden Zeilen einfach auskommentiert lassen. # # Die Jobs rufen Wrapper-Skripte auf (archivmail-index-pending.sh / # archivmail-ocr-reprocess.sh), die per PID-Lockfile unter /var/run/archivmail/ # überlappende Läufe verhindern — analog zum mailpiler-Vorbild # (indexer.delta.sh mit MAINTMPFILE/DELTATMPFILE). Ohne diesen Schutz könnte # ein Lauf mit großem Backlog länger dauern als das Intervall und sich mit # dem nächsten Tick überlappen, was die Last-Glättung wieder aufheben würde. # # Anpassen: Intervall/Uhrzeiten unten nach Bedarf ändern (crontab-Syntax). # Die beiden Jobs sind bewusst leicht versetzt, damit Index- und OCR-Lauf # nicht exakt zeitgleich starten. # Index-Backlog (indexed_at IS NULL) alle 15 Minuten verarbeiten */15 * * * * root /usr/local/bin/archivmail-index-pending.sh >> /var/log/archivmail/index-pending.log 2>&1 # OCR-Backlog (ocr_status='pending') alle 15 Minuten, um 5 Min versetzt 5,20,35,50 * * * * root /usr/local/bin/archivmail-ocr-reprocess.sh >> /var/log/archivmail/ocr-reprocess.log 2>&1 # ── Vollständigkeits-Reconciliation (PROJ-52) ─────────────────────────── # Berechnet täglich pro Tenant/Quelle (SMTP-Journal, IMAP-Konto, POP3-Konto, # Datei-Import) die Anzahl archivierter Mails und schreibt einen Report # nach reconciliation_reports. Bei Abweichung > reconciliation.alert_threshold_pct # (config.yml, Default 50%) unter dem 7-Tage-Durchschnitt wird ein # Audit-Log-Eintrag (reconciliation_anomaly) geschrieben. Läuft nachts um # 04:10 Uhr, also nach Purge (03:40) und außerhalb der OCR-Pause. 10 4 * * * root /opt/archivmail/archivmail reconcile --config /etc/archivmail/config.yml >> /var/log/archivmail/reconcile.log 2>&1 # ── App-Backup (PROJ-66, optional — Ergänzung zur PBS-/Snapshot-Sicherung) ── # `archivmail backup` sichert Store (Hardlinks erhalten), Keyfile, Config und # PostgreSQL-Dump konsistent in ein Zielverzeichnis. Standardmäßig NICHT # aktiviert — auskommentiert lassen, bis ein konkretes -dest-Ziel (idealerweise # ein von diesem Host getrenntes Mount, z.B. NFS/rsync-Ziel) feststeht, siehe # features/PROJ-66-backup-strategie.md. -keep begrenzt die Anzahl vorgehaltener # Backup-Verzeichnisse (Rotation läuft nur nach einem erfolgreichen Lauf, ein # fehlgeschlagener Backup löscht nie ein älteres gutes Backup). # # 0 3 * * * root /opt/archivmail/archivmail backup --config /etc/archivmail/config.yml --dest /mnt/backup/archivmail --keep 14 >> /var/log/archivmail/backup.log 2>&1 # ── Weitere Jobs (geplant, noch nicht implementiert) ──────────────────── # 30 2 * * * archivmail /opt/archivmail/archivmail reindex # nächtlicher Voll-Reindex