feat(PROJ-56): OCR-Pausenfenster per SIGHUP-Reload statt Restart
paused_hours konnte bisher nur über einen vollen Prozess-Restart geändert werden, was SMTP/IMAP/API unnötig unterbricht. Worker.pausedHours ist jetzt ein atomic.Pointer mit SetPausedHours(); SIGHUP liest config.yml neu und aktualisiert nur die OCR-Pausenzeit im laufenden Prozess. Neue deploy/cron.d/archivmail-ocr-pause(.sh) lässt Admins die Pausenzeiten direkt in der Cron-Datei pflegen und löst per systemctl reload statt restart aus. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
co-authored by
Claude Sonnet 4.6
parent
be48a99af9
commit
dba9939880
@@ -0,0 +1,20 @@
|
||||
# archivmail — 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 (Minute Stunde * * *)
|
||||
# und an die crontab-Syntax halten. Bei wrap-around Fenstern (z.B. 22:00–06:00)
|
||||
# einfach "start" auf den späteren, "stop" auf den früheren Zeitpunkt legen.
|
||||
#
|
||||
# Format: Minute Stunde Tag Monat Wochentag User Befehl
|
||||
#
|
||||
# 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
|
||||
Executable
+42
@@ -0,0 +1,42 @@
|
||||
#!/usr/bin/env bash
|
||||
# archivmail — schreibt paused_hours nach /etc/archivmail/config.yml und
|
||||
# stößt per SIGHUP (systemctl reload) einen Reload an, damit der OCR-Worker
|
||||
# das neue Fenster übernimmt — ohne SMTP/IMAP/API-Verbindungen zu kappen.
|
||||
#
|
||||
# Aufruf (siehe deploy/cron.d/archivmail-ocr-pause):
|
||||
# archivmail-ocr-pause.sh start <from_hour> <to_hour>
|
||||
# archivmail-ocr-pause.sh stop
|
||||
set -euo pipefail
|
||||
|
||||
CONFIG="/etc/archivmail/config.yml"
|
||||
SERVICE="archivmail"
|
||||
|
||||
if [ ! -f "$CONFIG" ]; then
|
||||
echo "archivmail-ocr-pause: $CONFIG nicht gefunden" >&2
|
||||
exit 1
|
||||
fi
|
||||
|
||||
cmd="${1:-}"
|
||||
|
||||
case "$cmd" in
|
||||
start)
|
||||
from="${2:?from_hour fehlt}"
|
||||
to="${3:?to_hour fehlt}"
|
||||
if ! grep -q "^ocr:" "$CONFIG"; then
|
||||
printf '\nocr:\n paused_hours: [%s, %s]\n' "$from" "$to" >> "$CONFIG"
|
||||
elif grep -q "paused_hours:" "$CONFIG"; then
|
||||
sed -i -E "s/^([[:space:]]*paused_hours:).*/\1 [${from}, ${to}]/" "$CONFIG"
|
||||
else
|
||||
sed -i "/^ocr:/a\\ paused_hours: [${from}, ${to}]" "$CONFIG"
|
||||
fi
|
||||
;;
|
||||
stop)
|
||||
sed -i -E "s/^([[:space:]]*paused_hours:).*/\1 null/" "$CONFIG"
|
||||
;;
|
||||
*)
|
||||
echo "Usage: $0 {start <from_hour> <to_hour>|stop}" >&2
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
|
||||
systemctl reload "$SERVICE"
|
||||
Reference in New Issue
Block a user