Sichert Store (Hardlinks erhalten, PROJ-65-tauglich ohne Abhängigkeit von rsync -H), Keyfile, config.yml und PostgreSQL (pg_dump -Fc) konsistent in ein Zielverzeichnis. Rotation läuft nur nach erfolgreichem Lauf, ein fehlgeschlagener Backup rotiert nie ein gutes altes Backup weg. restore ist bewusst konservativ: bricht bei nicht-leerem Store/Keyfile ohne -force ab, stoppt/startet den Dienst nicht selbst, gibt am Ende die Pflicht-Verifikationsschritte (reconcile, reindex, Stichprobe) aus. Ergänzt die vorhandene PBS+Sync-Infrastruktur um einen App-eigenen, selektiven Restore-Weg. Kein automatischer Cron-Eintrag aktiv (Zielpfad noch offen), nur als Vorlage in deploy/cron.d/archivmail auskommentiert. Kein lokaler go build möglich, QA folgt auf Testserver.
88 lines
5.4 KiB
Plaintext
88 lines
5.4 KiB
Plaintext
# /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
|