Fehler in der Oberflaeche abfangen, Backups planbar machen
Der Anlass: "Backup erstellen" bei fehlendem Container beendete die
ganze TUI mit einer Fehlerzeile in der Shell.
Ursachen waren zwei, beide behoben:
1. die() in GUI-Pfaden. Neue Helfer gui_need_container/gui_need_sites
melden das Problem im Dialog und kehren zurueck. Interaktives wie
Shell und Terminal-Browser laeuft jetzt ueber gui_run_interactive
in einer Subshell mit Weiter-mit-ENTER.
2. "set -e". Schon ein Rueckgabewert != 0 aus einer Menuefunktion
beendete das Skript, weil Menuezweige keine Bedingung sind. 47
"|| return" auf "|| return 0" gestellt und 37 Menuezweige mit
"|| true" abgesichert. Ausserdem schlug ein "clear" ohne TERM fehl
und riss alles mit - drei Aufrufe abgesichert.
Jeder Hauptmenuepunkt wurde einzeln durchlaufen und kehrt sauber zurueck.
Neu: Backup-Jobs
Der Menuepunkt heisst jetzt "Backup erstellen / planen" mit Untermenue
(manuell erstellen, Jobs verwalten, Automatik ein/aus, Zeitplan
anzeigen, Job sofort ausfuehren). Dieselben Jobs liegen auch in den
Einstellungen unter "Backup-Jobs".
Manuelle Backups nehmen weiterhin immer BACKUP_DIR aus der .env.
Jeder Job hat dagegen sein eigenes Zielverzeichnis, seinen eigenen
Zeitplan, eigene Optionen und eine eigene Aufbewahrung, nach der er
sein Zielverzeichnis selbst aufraeumt.
Vollstaendig auch per Parameter:
job list | status | add | set | del | enable | disable
| run | run-all | auto [on|off]
mit --name --sites --cron --dir --keep --no-rrds --no-logs --stop
--disabled.
"job auto on" erzeugt aus den aktiven Jobs /etc/cron.d/checkmk-backup,
eine Zeile je Job mit dessen eigenem Zeitplan. Ohne root werden die
Zeilen ausgegeben statt kommentarlos zu scheitern. Der Schalter steht
als BACKUP_AUTO in der .env, die Jobs in backup-jobs.conf.
Nebenbei behoben: "local f; f=... tmp" fuehrte tmp als Kommando aus,
wodurch job_put und job_remove nichts schrieben.
Dokumentiert als Abschnitt 15.1 in beiden Sprachfassungen.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -553,7 +553,8 @@ Die wichtigsten Schalter:
|
||||
| `NPM_ENABLED` | `on`/`off` – soll der Proxy-Manager-Container überhaupt laufen? Siehe [12.4](#124-proxy-manager-ganz-abschalten-externer-nginx) |
|
||||
| `NPM_ADMIN_PORT` | Port der Proxy-Manager-Oberfläche (Vorgabe 81) – nur über `npm-port` bzw. das Menü ändern |
|
||||
| `NPM_ADMIN_URL` | Startseite des Terminal-Browsers; leer = automatisch aus `NPM_ADMIN_PORT` |
|
||||
| `BACKUP_DIR` | Ablage für Backups/Bundles (Vorgabe `./backups`) |
|
||||
| `BACKUP_DIR` | Ablage für **manuelle** Backups (Vorgabe `./backups`); geplante Jobs haben eigene Pfade |
|
||||
| `BACKUP_AUTO` | `on`/`off` – sollen die Backup-Jobs per cron laufen? |
|
||||
| `CERT_DOMAIN`, `CERT_DAYS` | Vorgaben für selbstsignierte Zertifikate |
|
||||
|
||||
### 7.1 Wer liest die `.env` – und warum gibt es sie zusätzlich zum Skript?
|
||||
@@ -1324,6 +1325,7 @@ Eine Dateiauswahl mit Verzeichnisnavigation ist eingebaut.
|
||||
| `start-all-sites` | alle Sites starten (wird von systemd aufgerufen) |
|
||||
| `backup …` | Backup als `.tar.gz`-Bundle |
|
||||
| `list` / `verify` / `prune --keep N` | Backups verwalten |
|
||||
| `job list\|add\|set\|del\|run\|auto` | geplante Backups (eigene Zielpfade je Job) |
|
||||
| `restore …` | Backup zurückspielen |
|
||||
| `import …` | Migrations-Bundle einspielen |
|
||||
| `image status\|list\|pull\|download\|load\|use` | Checkmk-Image beschaffen und auswaehlen |
|
||||
@@ -1435,17 +1437,112 @@ Auflisten und prüfen:
|
||||
./scripts/cmk-manage.sh prune --keep 7
|
||||
```
|
||||
|
||||
### Nächtliches Backup per Cron
|
||||
### 15.1 Geplante Backups (Backup-Jobs)
|
||||
|
||||
Manuelle Backups gehen immer nach `BACKUP_DIR` aus der `.env`. Geplante Jobs
|
||||
bringen dagegen **ihr eigenes Zielverzeichnis** mit – so lässt sich täglich auf
|
||||
eine NAS-Freigabe und wöchentlich woanders hin sichern.
|
||||
|
||||
Im Menü: **backup → „Backup erstellen / planen"**
|
||||
|
||||
```
|
||||
┌──────────── Backup erstellen / planen ─────────────────┐
|
||||
│ Manuelle Backups gehen immer nach: │
|
||||
│ /opt/checkmk-stack/backups (Einstellung BACKUP_DIR)│
|
||||
│ │
|
||||
│ Geplante Jobs haben ihr eigenes Zielverzeichnis. │
|
||||
│ Automatische Ausfuehrung: aus │
|
||||
│ │
|
||||
│ manuell Backup jetzt erstellen │
|
||||
│ jobs Backup-Jobs verwalten │
|
||||
│ auto Automatische Ausfuehrung ein/aus │
|
||||
│ status Zeitplan und Jobs anzeigen │
|
||||
│ jetzt Einen Job sofort ausfuehren │
|
||||
│ back zurueck │
|
||||
└────────────────────────────────────────────────────────┘
|
||||
```
|
||||
|
||||
Dieselben Jobs liegen auch in den **Einstellungen → „Backup-Jobs"**.
|
||||
|
||||
#### Job anlegen
|
||||
|
||||
Im Menü führt ein Dialog durch Sites, Zeitplan (täglich / wöchentlich /
|
||||
monatlich / freier Cron-Ausdruck), Zielverzeichnis, Aufbewahrung und Optionen.
|
||||
Dasselbe per Parameter:
|
||||
|
||||
```bash
|
||||
sudo crontab -e
|
||||
# täglich 02:15, alle Sites, ohne Logs, 14 Backups aufbewahren
|
||||
sudo ./scripts/cmk-manage.sh job add --name nachts \
|
||||
--cron "15 2 * * *" --no-logs --keep 14
|
||||
|
||||
# sonntags 03:30, nur zwei Sites, auf die NAS, ohne RRDs, 8 aufbewahren
|
||||
sudo ./scripts/cmk-manage.sh job add --name nas-woche \
|
||||
--cron "30 3 * * 0" --sites prod,test \
|
||||
--dir /mnt/nas/checkmk --no-rrds --no-logs --keep 8
|
||||
```
|
||||
|
||||
```cron
|
||||
15 2 * * * /opt/checkmk-stack/scripts/cmk-manage.sh -y backup --all --no-logs >>/var/log/cmk-backup.log 2>&1
|
||||
30 3 * * 0 /opt/checkmk-stack/scripts/cmk-manage.sh -y prune --keep 14 >>/var/log/cmk-backup.log 2>&1
|
||||
Alle Kommandos:
|
||||
|
||||
| Kommando | Wirkung |
|
||||
|---|---|
|
||||
| `job list` | angelegte Jobs anzeigen |
|
||||
| `job status` | Zeitplan, Cron-Datei und Schalter |
|
||||
| `job add --name N --cron "…"` | Job anlegen |
|
||||
| `job set NAME …` | Job ändern (nicht genannte Felder bleiben) |
|
||||
| `job del NAME` | Job löschen (die Backups bleiben) |
|
||||
| `job enable\|disable NAME` | Job ein-/ausschalten |
|
||||
| `job run NAME` | Job sofort ausführen |
|
||||
| `job run-all` | alle aktiven Jobs ausführen |
|
||||
| `job auto on\|off` | automatische Ausführung ein/aus |
|
||||
|
||||
Optionen von `job add` / `job set`:
|
||||
|
||||
| Option | Bedeutung |
|
||||
|---|---|
|
||||
| `--sites ALL\|a,b` | zu sichernde Sites (Vorgabe `ALL`) |
|
||||
| `--cron "15 2 * * *"` | Zeitplan, fünf Cron-Felder |
|
||||
| `--dir VERZ` | Zielverzeichnis dieses Jobs (Vorgabe `BACKUP_DIR`) |
|
||||
| `--keep N` | wie viele Backups im Ziel bleiben (`0` = alle) |
|
||||
| `--no-rrds`, `--no-logs`, `--stop` | wie bei `backup` |
|
||||
| `--disabled` | anlegen, aber noch nicht einplanen |
|
||||
|
||||
#### Automatik ein- und ausschalten
|
||||
|
||||
```bash
|
||||
sudo ./scripts/cmk-manage.sh job auto on # einplanen
|
||||
sudo ./scripts/cmk-manage.sh job auto off # Zeitplan entfernen
|
||||
```
|
||||
|
||||
`on` schreibt aus allen **aktiven** Jobs die Datei `/etc/cron.d/checkmk-backup`
|
||||
– je Job eine Zeile mit seinem eigenen Zeitplan:
|
||||
|
||||
```cron
|
||||
15 2 * * * root /opt/checkmk-stack/scripts/cmk-manage.sh -y job run nachts >>/var/log/cmk-backup.log 2>&1
|
||||
30 3 * * 0 root /opt/checkmk-stack/scripts/cmk-manage.sh -y job run nas-woche >>/var/log/cmk-backup.log 2>&1
|
||||
```
|
||||
|
||||
Dafür werden root-Rechte gebraucht. Ohne root gibt das Kommando die Zeilen
|
||||
aus, damit man sie selbst übernehmen kann. `off` entfernt die Datei wieder; die
|
||||
Jobs selbst bleiben erhalten. Der Schalter steht als `BACKUP_AUTO` in der
|
||||
`.env`.
|
||||
|
||||
Nach jedem Lauf räumt der Job sein eigenes Zielverzeichnis auf `--keep` auf –
|
||||
ein separater `prune`-Eintrag ist nicht nötig.
|
||||
|
||||
#### Wo die Jobs liegen
|
||||
|
||||
In `backup-jobs.conf` im Projektverzeichnis, eine Zeile je Job:
|
||||
|
||||
```
|
||||
name|sites|cron|verzeichnis|optionen|aufbewahren|aktiv
|
||||
nachts|ALL|15 2 * * *|/opt/checkmk-stack/backups|--no-logs|14|on
|
||||
nas-woche|prod,test|30 3 * * 0|/mnt/nas/checkmk|--no-rrds --no-logs|8|on
|
||||
```
|
||||
|
||||
Die Datei ist bewusst lesbar und versionierbar, gehört aber nicht ins
|
||||
Repository (sie steht in `.gitignore`, weil sie systemspezifische Pfade
|
||||
enthält).
|
||||
|
||||
---
|
||||
|
||||
## 16. Restore
|
||||
@@ -1739,6 +1836,8 @@ Checkmk-Werksnotizen (Werks/Release Notes) lesen.
|
||||
| Proxy-Manager-Oberfläche im Browser leer / nur Textfragmente | Textbrowser ohne JavaScript verwendet. `cmk-manage.sh browser --engine browsh` (bzw. `carbonyl`) nehmen |
|
||||
| Selbstsigniertes Zertifikat lässt sich im Terminal-Browser nicht hochladen | Datei-Dialoge gibt es dort nicht – Upload über die API, siehe [Kapitel 11.3](#113-grenze-datei-upload) |
|
||||
| `browser` meldet „braucht ein echtes Terminal" | Aufruf aus Pipe/Skript. Direkt auf der Konsole oder per SSH aufrufen; nur der Bau geht headless mit `--build-only` |
|
||||
| Menüpunkt bricht mit einer Fehlermeldung in die Shell ab | behoben: fehlende Container, Sites oder Backups werden jetzt als Dialog gemeldet, die Oberfläche bleibt offen |
|
||||
| `job auto on` meldet fehlende Rechte | `/etc/cron.d/` braucht root: mit `sudo` aufrufen, oder die ausgegebenen Zeilen selbst übernehmen |
|
||||
| TUI startet nicht | `dialog` installieren: `apt-get install -y dialog` bzw. `dnf install -y dialog` |
|
||||
| Site startet nicht, `tmp`-Fehler | `./scripts/cmk-manage.sh omd config <site> set TMPFS off`, danach Site starten |
|
||||
|
||||
|
||||
Reference in New Issue
Block a user