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:
sysops
2026-06-24 14:46:13 +02:00
co-authored by Claude Sonnet 4.6
parent be48a99af9
commit dba9939880
5 changed files with 119 additions and 12 deletions
+42
View File
@@ -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"