Karte 12: systemd-Timer für den täglichen Eskalations-Prüflauf
CI / backend-tests (push) Successful in 1m8s
CI / frontend-build (push) Successful in 25s

scripts/eskalation_pruefen.py ruft den Service direkt gegen die DB auf (kein
HTTP/Admin-Token nötig, gleiches Muster wie scripts/create_admin.py).
mabea-eskalation.timer läuft täglich 06:00 Uhr. Zeitschwellen bleiben in der
DB (eskalation_konfiguration), nicht im Timer.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CVgbozhYmuEhiEJHffRXCV
This commit is contained in:
2026-09-04 18:28:46 +02:00
co-authored by Claude Sonnet 5
parent e0cbf4b8de
commit c71df1ac4d
5 changed files with 145 additions and 0 deletions
+16
View File
@@ -21,7 +21,23 @@ Installiert PostgreSQL + nginx, legt DB-Rolle/Datenbank an, richtet nginx als Re
3. `alembic upgrade head` ausführen.
4. `mabea-backend.service.template` nach `/etc/systemd/system/mabea-backend.service` kopieren (Pfade/User anpassen), `systemctl daemon-reload && systemctl enable --now mabea-backend`.
## Eskalations-Prüfung einrichten (Karte 12, nach Backend-Deploy)
```bash
cp mabea-eskalation.service.template /etc/systemd/system/mabea-eskalation.service
cp mabea-eskalation.timer.template /etc/systemd/system/mabea-eskalation.timer
systemctl daemon-reload
systemctl enable --now mabea-eskalation.timer
```
Läuft täglich 06:00 Uhr (±5min Streuung), ruft `scripts/eskalation_pruefen.py` direkt
gegen die DB auf (kein HTTP/Admin-Token nötig). Zeitschwellen selbst liegen in der DB
(`eskalation_konfiguration`, admin-editierbar über `GET/PUT /api/v1/eskalation/konfiguration`),
nicht in dieser Timer-Konfiguration. Manueller Testlauf: `systemctl start mabea-eskalation.service`,
Ergebnis in `journalctl -u mabea-eskalation.service`.
## Dateien
- `install_server.sh` Server-Grundausstattung (PostgreSQL, nginx), idempotent
- `nginx_mabea.conf.template` Reverse-Proxy-Vorlage, von `install_server.sh` verwendet
- `mabea-backend.service.template` systemd-Unit-Vorlage für das Backend (noch nicht aktiviert, Pfade anpassen)
- `mabea-eskalation.service.template` / `mabea-eskalation.timer.template` täglicher Eskalations-Prüflauf (Karte 12)
+17
View File
@@ -0,0 +1,17 @@
[Unit]
Description=MABEA Eskalations-Pruefung (Karte 12, oneshot)
After=network.target postgresql.service
Requires=postgresql.service
[Service]
Type=oneshot
User=mabea
WorkingDirectory=/opt/mabea/backend
EnvironmentFile=/opt/mabea/backend/.env
ExecStart=/opt/mabea/backend/.venv/bin/python -m scripts.eskalation_pruefen
NoNewPrivileges=true
ProtectSystem=strict
ProtectHome=true
PrivateTmp=true
ReadWritePaths=/opt/mabea/backend
+12
View File
@@ -0,0 +1,12 @@
[Unit]
Description=MABEA Eskalations-Pruefung taeglich (Karte 12)
[Timer]
# Taegliche Pruefung reicht - Schwellen (eskalation_konfiguration) sind in Tagen,
# ein untertaegiges Intervall brächte keinen echten Zusatznutzen, nur mehr Last.
OnCalendar=*-*-* 06:00:00
Persistent=true
RandomizedDelaySec=300
[Install]
WantedBy=timers.target