Root Cause für ausbleibende Lastsenkung: update.sh hat /etc/cron.d/archivmail nie auf den Server kopiert, daher fehlten die PROJ-58-Cronzeilen trotz aktivem batch_mode komplett. Jetzt kopiert update.sh die Cron-Datei und alle Wrapper-Skripte bei jedem Deploy automatisch ein. Zusätzlich: Wrapper-Skripte (analog mailpiler indexer.delta.sh) verhindern per Lockfile, dass sich Cron-Läufe bei großem Backlog überlappen. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
26 lines
1.0 KiB
Bash
Executable File
26 lines
1.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# archivmail — Cron-Wrapper für 'index-pending' (PROJ-58 batch_mode).
|
|
#
|
|
# Verhindert überlappende Läufe per PID-Lockfile, analog zum mailpiler-Vorbild
|
|
# (/usr/libexec/piler/indexer.delta.sh, MAINTMPFILE/DELTATMPFILE-Muster):
|
|
# Läuft ein Cron-Job länger als das Intervall (z.B. großer Backlog), würde
|
|
# sonst ein zweiter, parallel gestarteter Lauf zusätzliche Last erzeugen statt
|
|
# sie zu glätten — genau das soll batch_mode ja vermeiden.
|
|
set -euo pipefail
|
|
|
|
LOCKFILE=/var/run/archivmail/index-pending.lock
|
|
LOGTAG=archivmail-index-pending
|
|
mkdir -p "$(dirname "$LOCKFILE")"
|
|
|
|
if [[ -f "$LOCKFILE" ]]; then
|
|
echo "INDEX-PENDING ERROR: bereits laufender Lauf seit $(cat "$LOCKFILE")" | logger -t "$LOGTAG"
|
|
exit 0
|
|
fi
|
|
|
|
date > "$LOCKFILE"
|
|
trap 'rm -f "$LOCKFILE"' EXIT
|
|
|
|
echo "INDEX-PENDING INFO: Lauf gestartet" | logger -t "$LOGTAG"
|
|
/opt/archivmail/archivmail index-pending --config /etc/archivmail/config.yml --limit "${ARCHIVMAIL_INDEX_LIMIT:-500}"
|
|
echo "INDEX-PENDING INFO: Lauf beendet" | logger -t "$LOGTAG"
|