From 226bbe1bf7af36e6b7b101d50e4b08230776dcae Mon Sep 17 00:00:00 2001 From: Frank Schwenk Date: Fri, 12 Jun 2026 14:56:47 +0200 Subject: [PATCH] docs: mark Plesk cron todo done; optional heartbeat backlog Record live monitor.php cron config in HOSTING.md and close todo 05. Move optional */5 heartbeat task to todo/13. Co-authored-by: Cursor --- HOSTING.md | 25 +++++++++++------- README.md | 2 +- todo/03-monitoring-pull-phase1.md | 2 +- todo/05-plesk-cron.md | 31 +++++++++++++--------- todo/13-optional-plesk-cron-heartbeat.md | 33 ++++++++++++++++++++++++ todo/README.md | 7 +++-- 6 files changed, 75 insertions(+), 25 deletions(-) create mode 100644 todo/13-optional-plesk-cron-heartbeat.md diff --git a/HOSTING.md b/HOSTING.md index 4b58863..929c6cd 100644 --- a/HOSTING.md +++ b/HOSTING.md @@ -151,19 +151,26 @@ Ausgehende Mails vom 0012.de-Mailserver (`ha01s019.org-dns.com`) werden von **Tu ## Geplante Aufgaben (Cron) -Plesk: **Websites & Domains → Geplante Aufgaben → Aufgabe planen** +Plesk: **Websites & Domains → Geplante Aufgaben** -| Einstellung | Empfehlung | -|-------------|------------| +**Stand: eingerichtet 2026-06-12** — eine Aufgabe für Pull-Monitoring (`monitor.php`). + +| Einstellung | Ist-Wert | +|-------------|----------| | Aufgabentyp | PHP-Skript ausführen | -| Skriptpfad | `httpdocs/monitor.php` (nach Deployment) | -| PHP-Version | aktuelle verfügbare (z. B. 8.5.x) | +| Skriptpfad | `httpdocs/monitor.php` | +| PHP-Version | 8.5.x (höchste stabile in Plesk) | +| Status | Aktiv | | Ausführen | Cron-Stil | -| Schedule Pull-Checks | `*/10 * * * *` (alle 10 Min) | -| Schedule Heartbeat-Check | `*/5 * * * *` (Push-Stale-Prüfung, ggf. in monitor.php) | -| Benachrichtigen | „Nur Fehler“ für Cron-PHP-Fehler; App-Alerts über eigenes SMTP | +| Schedule | `*/10 * * * *` (alle 10 Min) | +| Benachrichtigen | Nur Fehler (Plesk-Mail bei PHP-Fehler; App-Alerts über SMTP) | +| Beschreibung | z. B. „0012 external monitoring pull“ | -Screenshot-Referenz: Plesk „Aufgabe planen“ (PHP-Skript, Cron-Stil, PHP-Version). +**Lauf:** Im Apache-Access-Log als `GET /monitor.php` mit User-Agent `curl/8.20.0` sichtbar. Enthält HTTPS/SSL-Pull, boka-Stale-Prüfung (15 Min) und Push-Schwellen — kein separater Heartbeat-Cron nötig. + +**Optional:** Zweite Aufgabe `*/5` nur für Push-Stale — [`todo/13-optional-plesk-cron-heartbeat.md`](todo/13-optional-plesk-cron-heartbeat.md) (backlog, nicht umgesetzt). + +**Follow-up:** Cron auf CLI (`php monitor.php`) + HTTP-Token — [`todo/12-monitor-php-token-check.md`](todo/12-monitor-php-token-check.md). Weitere Plesk-Funktionen (Git, Composer, Hosting-Einstellungen): [`PLESK.md`](PLESK.md) diff --git a/README.md b/README.md index cf614ed..8a5f2f3 100644 --- a/README.md +++ b/README.md @@ -72,5 +72,5 @@ Offene Arbeiten: [`todo/README.md`](todo/README.md) 1. `.env.example` → `.env` kopieren und ausfüllen (lokal, FTP) 2. `python3 scripts/sync-server-env.py` → erzeugt `server.env` für den Webspace 3. `./scripts/deploy.sh` — spielt `public/` + `config/` + `server.env` hoch (**.env bleibt lokal**) -4. In Plesk: geplante Aufgabe für `monitor.php` (Cron-Stil, z. B. `*/10 * * * *`) +4. In Plesk: geplante Aufgabe für `monitor.php` (Cron-Stil, `*/10 * * * *`) — erledigt; Details [`todo/05-plesk-cron.md`](todo/05-plesk-cron.md) 5. Auf boka: Push-Skript + Crontab — erledigt via SSH (`frank@frank-schwenk.de`, Repo `~/server`); Details [`todo/04-monitoring-push-boka.md`](todo/04-monitoring-push-boka.md) diff --git a/todo/03-monitoring-pull-phase1.md b/todo/03-monitoring-pull-phase1.md index 965db11..0460066 100644 --- a/todo/03-monitoring-pull-phase1.md +++ b/todo/03-monitoring-pull-phase1.md @@ -47,7 +47,7 @@ ## Notizen -- Plesk-Cron: `httpdocs/monitor.php`, `*/10 * * * *`, „Nur Fehler“ (Todo 05) +- Plesk-Cron: `httpdocs/monitor.php`, `*/10 * * * *`, „Nur Fehler“ — erledigt (Todo 05, 2026-06-12) - Browser-Aufruf `https://0012.de/monitor.php` → leere Seite (HTTP 200) ist korrekt - SSL-`warn` auf boka-Hosts nach LE short→long-lived-Wechsel: bekannt, kein Handlungsbedarf auf 0012.de diff --git a/todo/05-plesk-cron.md b/todo/05-plesk-cron.md index e04d83d..98e0130 100644 --- a/todo/05-plesk-cron.md +++ b/todo/05-plesk-cron.md @@ -1,6 +1,7 @@ # 05 — Plesk Cron (Geplante Aufgaben) **Priorität:** high +**Status:** erledigt (2026-06-12) **Abhängigkeiten:** 01, 03 (Skript muss existieren) **Referenz:** Plesk → Websites & Domains → Geplante Aufgaben @@ -10,16 +11,17 @@ Monitoring automatisch alle 5–10 Minuten ausführen. ## Checkliste -- [ ] Aufgabe anlegen: **PHP-Skript ausführen** -- [ ] Skriptpfad: `httpdocs/monitor.php` (Pfad nach Deployment verifizieren) -- [ ] PHP-Version: höchste stabile (z. B. 8.5.7) -- [ ] **Aktiv** angehakt -- [ ] Ausführen: **Cron-Stil** -- [ ] Expression: `*/10 * * * *` (Pull-Checks alle 10 Min) -- [ ] Beschreibung: z. B. „0012 external monitoring pull“ -- [ ] Benachrichtigen: **Nur Fehler** (siehe unten) -- [ ] **Jetzt ausführen** — Exit-Code / Log prüfen -- [ ] Optional zweite Aufgabe für leichtgewichtigen Heartbeat-Only-Check (`*/5`) — nur wenn von monitor.php getrennt +- [x] Aufgabe anlegen: **PHP-Skript ausführen** +- [x] Skriptpfad: `httpdocs/monitor.php` (Pfad nach Deployment verifizieren) +- [x] PHP-Version: höchste stabile (z. B. 8.5.x) +- [x] **Aktiv** angehakt +- [x] Ausführen: **Cron-Stil** +- [x] Expression: `*/10 * * * *` (Pull-Checks alle 10 Min) +- [x] Beschreibung: z. B. „0012 external monitoring pull“ +- [x] Benachrichtigen: **Nur Fehler** (siehe unten) +- [x] **Jetzt ausführen** — Exit-Code / Log prüfen + +Optional zweite Aufgabe für Heartbeat-only (`*/5`): ausgelagert nach [`13-optional-plesk-cron-heartbeat.md`](13-optional-plesk-cron-heartbeat.md) — nicht nötig, Stale-Check läuft im gleichen `monitor.php`-Lauf. ## Benachrichtigen: „Nur Fehler“ @@ -45,8 +47,13 @@ Plesk nutzt System-Timezone des Servers. ## Akzeptanzkriterien -- Aufgabe läuft scheduled ohne manuellen Klick -- `data/last-checks.json` Timestamp bewegt sich +- [x] Aufgabe läuft scheduled ohne manuellen Klick (Access-Log: `curl/8.20.0` → `GET /monitor.php`) +- [x] `data/last-checks.json` Timestamp bewegt sich (verifiziert in Todo 03) + +## Notizen + +- Lauf im Access-Log als HTTP-GET sichtbar (Plesk ruft URL per curl auf). Follow-up: CLI + Token — [`12-monitor-php-token-check.md`](12-monitor-php-token-check.md) +- Ist-Konfiguration dokumentiert in [`../HOSTING.md`](../HOSTING.md#geplante-aufgaben-cron) ## Fehlerbehebung diff --git a/todo/13-optional-plesk-cron-heartbeat.md b/todo/13-optional-plesk-cron-heartbeat.md new file mode 100644 index 0000000..96ade0c --- /dev/null +++ b/todo/13-optional-plesk-cron-heartbeat.md @@ -0,0 +1,33 @@ +# 13 — Optional: Plesk Cron Heartbeat (`*/5`) + +**Priorität:** backlog (optional) +**Status:** nicht umgesetzt — bewusst weggelassen +**Abhängigkeiten:** 05 (Haupt-Cron), 04 (Push ingest) +**Referenz:** [`05-plesk-cron.md`](05-plesk-cron.md), [`../HOSTING.md`](../HOSTING.md) + +## Ziel + +Optional eine **zweite** geplante Aufgabe in Plesk, die nur die Push-Stale-Prüfung (boka silent) alle 5 Min ausführt — getrennt vom vollen Pull-Check in `monitor.php`. + +## Ausgangslage + +- Haupt-Cron (Todo 05): `*/10 * * * *` → `httpdocs/monitor.php` (HTTPS/SSL + boka-Stale/Schwellen) +- boka pusht alle 5 Min; Stale-Schwelle in `monitor-lib.php`: 15 Min +- **Aktuell ausreichend:** ein Lauf alle 10 Min reicht für Stale-Erkennung + +## Wann sinnvoll + +- Pull-Checks dauern lang (>5 Min) und sollen seltener laufen, Stale-Alarm aber früher kommen +- Eigenes leichtgewichtiges Skript (nur `checkBokaPushStatus()`, kein HTTPS-Roundtrip) + +## Checkliste (falls umgesetzt) + +- [ ] Entscheidung: separates Skript (`monitor-heartbeat.php`) vs. Parameter an `monitor.php` +- [ ] Plesk-Aufgabe: Cron-Stil `*/5 * * * *`, PHP-Skript, „Nur Fehler“ +- [ ] Kein Doppel-Alarm: Retry-/Cooldown-Logik mit Haupt-Monitor abstimmen +- [ ] [`../HOSTING.md`](../HOSTING.md) und [`05-plesk-cron.md`](05-plesk-cron.md) aktualisieren + +## Akzeptanzkriterien + +- Stale-Alarm spätestens ~5 Min nach letztem Push (statt bis zu 10 Min + Pull-Laufzeit) +- Keine doppelten Mails bei gleichzeitigem Pull- und Heartbeat-Lauf diff --git a/todo/README.md b/todo/README.md index fac667d..86cf435 100644 --- a/todo/README.md +++ b/todo/README.md @@ -8,7 +8,7 @@ Nummerierte Todos für den 0012.de-Webspace. Abhängigkeiten beachten. | 02 | [02-email-smtp.md](02-email-smtp.md) | **high** | Postfächer, SMTP für Alerts (0012.de) | | 03 | [03-monitoring-pull-phase1.md](03-monitoring-pull-phase1.md) | **high** | `monitor.php`, HTTPS/SSL-Checks, Alarm | | 04 | [04-monitoring-push-boka.md](04-monitoring-push-boka.md) | **medium** | Push von boka → `ingest.php` — erledigt | -| 05 | [05-plesk-cron.md](05-plesk-cron.md) | **high** | Geplante Aufgaben in Plesk | +| 05 | [05-plesk-cron.md](05-plesk-cron.md) | **high** | Geplante Aufgaben in Plesk — erledigt | | 06 | [06-site-0012-landing.md](06-site-0012-landing.md) | **medium** | Status-Beacon Landing Page | | 07 | [07-mail-domains-external.md](07-mail-domains-external.md) | **medium** | MX für Domains ohne Mailserver | | 08 | [08-monitoring-phase2.md](08-monitoring-phase2.md) | **medium** | API-Health, Latenz, Backup-Heartbeat | @@ -16,17 +16,20 @@ Nummerierte Todos für den 0012.de-Webspace. Abhängigkeiten beachten. | 10 | [10-optional-plesk-git-composer.md](10-optional-plesk-git-composer.md) | backlog | Plesk Git / Composer evaluieren | | 11 | [11-boka-smtp-relay.md](11-boka-smtp-relay.md) | **medium** | boka-Apps über 0012.de-SMTP | | 12 | [12-monitor-php-token-check.md](12-monitor-php-token-check.md) | **medium** | HTTP-Zugriff auf `monitor.php` per Token | +| 13 | [13-optional-plesk-cron-heartbeat.md](13-optional-plesk-cron-heartbeat.md) | backlog | Optional: separater Heartbeat-Cron `*/5` | ## Backlog (ohne Priorität) Todo **10** — Plesk Git-Deploy und Composer; dokumentiert in [`../PLESK.md`](../PLESK.md), kein Blocker für 02–09. +Todo **13** — optionaler Heartbeat-Cron in Plesk; nicht nötig solange `monitor.php` alle 10 Min läuft. + Todo **11** — boka SMTP-Relay; abhängig von erledigtem **02**, kein Blocker für **03**. ## Empfohlene Reihenfolge ``` -01 → 02 → 05 → 03 → 06 +01 → 02 → 05 ✓ → 03 ✓ → 06 ↘ 04 ✓ (Push ingest.php) 07 (wenn Domains feststehen) 08 → 09