---
name: "system-healthcheck"
description: "Zyklischer Mastermind-Systemcheck: prüft Services/Ports/Endpoints/SSL/Disk/LLM-Hosts, repariert tote Services automatisch, alarmiert nur bei neuen Problemen."
---

# System Healthcheck — Mastermind VPS

Zyklische Selbstüberwachung des Gesamtsystems (Hostinger VPS `srv1532440`). Erkennt tote Tunnels, ausgefallene Services, SSL-Ablauf, volle Disks **bevor** sie beim Arbeiten stören. Deterministisch (kein LLM im Kern), mit Auto-Reparatur und Anti-Spam.

## Wann nutzen
- Auf Zuruf: "Systemcheck", "Status", "ist alles gesund?", "läuft alles?"
- Nach Eingriffen an Services/Nginx/Config (Regression-Check)
- Läuft zusätzlich automatisch alle 30 Min via Cron

## Schnellabruf (manuell)
```bash
bash /root/.openclaw/workspace/scripts/system-healthcheck.sh; echo EXIT=$?
```
- Exit 0 = ok/nur Warnungen · Exit 1 = echte Probleme
- Report: `/root/.openclaw/workspace/data/healthcheck-last.json`
- Lesbare Ausgabe direkt auf stdout (❌ Probleme, ⚠️ Warnungen)

## Was geprüft wird
| Bereich | Details |
|---|---|
| systemd-Services | `nginx`, `stats-server`, `hermes-dashboard`, `code-server@root` |
| Ports | OpenClaw-Gateway `18789`, stats-server `18791`, Hermes `9119` |
| HTTP-Endpoints | `files.raumkommander.at/api/stats`, `/api/macstudio/health`, `openclaw.raumkommander.at/`, `hermes.raumkommander.at/login`, `dashboard.html` (401 = gesund, da Basic-Auth) |
| SSL | Ablauf aller 3 Domains; `<14d` = Warnung, abgelaufen = Problem |
| Lokale LLM-Hosts | VPS-Ollama `127.0.0.1:11434`, Mac-Studio-Tunnel (warn-only — dürfen offline sein) |
| Ressourcen | Disk (`>=90%` Problem, `>=80%` Warnung), RAM (`<300MB` Warnung) |
| Config | `nginx -t` Validität |

## Status-Logik
- `ok` — alles grün
- `warn` — nur unkritische Warnungen (z.B. Mac-Studio offline = bekannt/erwartet)
- `error` — echtes Problem, das gemeldet/repariert werden muss

## Auto-Reparatur (nur bei `error`)
- Toter systemd-Service → `systemctl restart <svc>`, dann Re-Check
- SSL `<14d` → `certbot renew`
- Port tot trotz aktivem Service → Service-Restart
- nginx-config invalid → **nicht** reloaden, nur melden
- **Keine** destruktiven Aktionen (kein `rm`, kein Config-Clobber)

## Anti-Spam
Vergleicht `data/healthcheck-last.json` mit `data/healthcheck-prev.json`. Es wird nur bei **neuen/ungelösten** Problemen alarmiert. Dauer-Warnungen (z.B. Mac offline) lösen keinen wiederholten Alarm aus.

## Outputs
- `memory/healthcheck-log.md` — eine Zeile pro Lauf
- `memory/healthcheck-ALARM.md` — nur bei ungelöstem Problem (von Heartbeat/Hauptsession gelesen, nach Behebung löschen)

## Cron
- Job: **"System Healthcheck (zyklisch)"** · ID `c2b6a5ac-11db-42ef-ab73-1462a6fded24`
- Schedule: `*/30 * * * *` (Europe/Vienna), isoliert, Model sonnet, `delivery=none`
- Manuell auslösen: `cron run` mit der Job-ID

## Heartbeat-Integration
`HEARTBEAT.md` prüft bei jedem Heartbeat `healthcheck-last.json` (status==error → melden) und `healthcheck-ALARM.md` (existiert → ansehen + melden + nach Fix löschen).

## Erweitern
Neue Checks ins Skript `scripts/system-healthcheck.sh` einfügen — vorhandene Helper nutzen: `check_service`, `check_port`, `check_http name url expected`, `check_ollama name url` (warn-only). Helper füllen die Arrays `PROBLEMS` / `WARNINGS` / `OK`.
