191 lines
4.6 KiB
Markdown
191 lines
4.6 KiB
Markdown
# Unraid User Scripts fuer Restore-Checks
|
|
|
|
## Ziel
|
|
|
|
Diese Vorlagen binden die validierten Restore-Checks in Unraid User Scripts ein.
|
|
|
|
Host-Repo-Pfad:
|
|
|
|
```text
|
|
/mnt/user/services/homelab-infra
|
|
```
|
|
|
|
**Wichtig - Cron-Semantik**: Vixie-Cron verknuepft `day-of-month` und `day-of-week` mit **OR**, sobald beide gesetzt sind. Wir triggern daher an jedem Samstag/Sonntag und filtern den Monatstag per Shell-Guard im User-Script. Siehe `ops/restore-tests/schedule.md`.
|
|
|
|
**Wichtig - keine doppelten Schreiber**: die Restore-Skripte schreiben ihren Markdown-Report **selbst** nach `/mnt/user/backups/restore-reports/<service>-YYYY-MM-DD.md`. User-Scripts duerfen den Job-Output **nicht** in dieselbe Datei umleiten, sonst gewinnt der letzte Writer. Wrapper-Output landet stattdessen in `/mnt/user/backups/restore-reports/_wrapper-<mode>-YYYY-MM-DD.log`.
|
|
|
|
## Script 1 - `restore-freshness-weekly`
|
|
|
|
Cron:
|
|
|
|
- `30 6 * * 1` (Montag 06:30)
|
|
|
|
Inhalt:
|
|
|
|
```bash
|
|
#!/bin/bash
|
|
exec /mnt/user/services/homelab-infra/ops/restore-tests/run-restore-job-with-ntfy.sh \
|
|
freshness homelab-info
|
|
```
|
|
|
|
Erwartung:
|
|
|
|
- prueft Dump-Frische
|
|
- prueft Report-Frische
|
|
- startet keine Container
|
|
|
|
## Script 2 - `restore-vaultwarden-monthly`
|
|
|
|
Cron:
|
|
|
|
- `0 7 * * 6` (jeden Samstag 07:00)
|
|
|
|
Guard: nur am ersten Samstag im Monat ausfuehren.
|
|
|
|
```bash
|
|
#!/bin/bash
|
|
# Guard: nur 1.-7. Tag im Monat, damit "1. Samstag" eindeutig getroffen wird.
|
|
day=$(date +%-d)
|
|
if [ "$day" -lt 1 ] || [ "$day" -gt 7 ]; then
|
|
exit 0
|
|
fi
|
|
exec /mnt/user/services/homelab-infra/ops/restore-tests/run-restore-job-with-ntfy.sh \
|
|
vaultwarden homelab-info
|
|
```
|
|
|
|
## Script 3 - `restore-gitea-monthly`
|
|
|
|
Cron:
|
|
|
|
- `15 7 * * 6` (jeden Samstag 07:15)
|
|
|
|
Guard: nur am dritten Samstag im Monat ausfuehren.
|
|
|
|
```bash
|
|
#!/bin/bash
|
|
day=$(date +%-d)
|
|
if [ "$day" -lt 15 ] || [ "$day" -gt 21 ]; then
|
|
exit 0
|
|
fi
|
|
exec /mnt/user/services/homelab-infra/ops/restore-tests/run-restore-job-with-ntfy.sh \
|
|
gitea homelab-info
|
|
```
|
|
|
|
## Script 4 - `restore-paperless-bimonthly`
|
|
|
|
Cron:
|
|
|
|
- `0 8 * * 6` (jeden Samstag 08:00)
|
|
|
|
Guard: nur am zweiten Samstag in ungeraden Monaten ausfuehren.
|
|
|
|
```bash
|
|
#!/bin/bash
|
|
month=$(date +%-m)
|
|
day=$(date +%-d)
|
|
case "$month" in
|
|
1|3|5|7|9|11) ;;
|
|
*) exit 0 ;;
|
|
esac
|
|
if [ "$day" -lt 8 ] || [ "$day" -gt 14 ]; then
|
|
exit 0
|
|
fi
|
|
exec /mnt/user/services/homelab-infra/ops/restore-tests/run-restore-job-with-ntfy.sh \
|
|
paperless homelab-info
|
|
```
|
|
|
|
## Script 5 - `restore-immich-quarterly`
|
|
|
|
Cron:
|
|
|
|
- `30 8 * * 0` (jeden Sonntag 08:30)
|
|
|
|
Guard: nur am zweiten Sonntag in Feb/Mai/Aug/Nov ausfuehren.
|
|
|
|
```bash
|
|
#!/bin/bash
|
|
month=$(date +%-m)
|
|
day=$(date +%-d)
|
|
case "$month" in
|
|
2|5|8|11) ;;
|
|
*) exit 0 ;;
|
|
esac
|
|
if [ "$day" -lt 8 ] || [ "$day" -gt 14 ]; then
|
|
exit 0
|
|
fi
|
|
exec /mnt/user/services/homelab-infra/ops/restore-tests/run-restore-job-with-ntfy.sh \
|
|
immich homelab-info
|
|
```
|
|
|
|
## Script 6 - `restore-authelia-bimonthly`
|
|
|
|
Cron:
|
|
|
|
- `30 7 * * 6` (jeden Samstag 07:30)
|
|
|
|
Guard: nur am zweiten Samstag in geraden Monaten ausfuehren.
|
|
|
|
```bash
|
|
#!/bin/bash
|
|
month=$(date +%-m)
|
|
day=$(date +%-d)
|
|
case "$month" in
|
|
2|4|6|8|10|12) ;;
|
|
*) exit 0 ;;
|
|
esac
|
|
if [ "$day" -lt 8 ] || [ "$day" -gt 14 ]; then
|
|
exit 0
|
|
fi
|
|
exec /mnt/user/services/homelab-infra/ops/restore-tests/run-restore-job-with-ntfy.sh \
|
|
authelia homelab-info
|
|
```
|
|
|
|
## Script 7 - `monthly-random-restore`
|
|
|
|
Cron:
|
|
|
|
- `0 9 1 * *` (erster Kalendertag im Monat 09:00) - kein Guard noetig.
|
|
|
|
```bash
|
|
#!/bin/bash
|
|
exec /mnt/user/services/homelab-infra/ops/restore-tests/monthly-random-restore.sh
|
|
```
|
|
|
|
## Script 8 - `restore-hetzner-snapshot-monthly`
|
|
|
|
Cron:
|
|
|
|
- `0 6 15 * *` (15. des Monats 06:00)
|
|
|
|
Inhalt:
|
|
|
|
```bash
|
|
#!/bin/bash
|
|
set -euo pipefail
|
|
exec bash /mnt/user/services/homelab-infra/ops/restore-tests/run-restore-job-with-ntfy.sh \
|
|
hetzner-snapshot homelab-info
|
|
```
|
|
|
|
Erwartung:
|
|
|
|
- listet Hetzner Storage Box Snapshots read-only via SFTP aus dem `borg-ui`-Container
|
|
- restauriert eine kleine Probe-Datei aus `.zfs/snapshot` in ein Temp-Verzeichnis
|
|
- schreibt den Report nach `/mnt/user/backups/restore-reports/`
|
|
- sendet Erfolg nach `homelab-info`, Fehler nach `homelab-alerts`
|
|
|
|
## Stand
|
|
|
|
- die ersten Bash-Jobs wurden am 2026-05-07 hostseitig erfolgreich verifiziert
|
|
- `freshness`, `vaultwarden`, `gitea`, `paperless`, `immich`, `authelia` und `hetzner-snapshot` sind als Host-Jobs verfuegbar
|
|
- ntfy-Wrapper schreibt Erfolg/Fehler-Meldungen an die definierten Topics
|
|
|
|
## Fehler-Topic
|
|
|
|
Fehler gehen unabhaengig vom Erfolgstopic nach `homelab-alerts` (siehe `RESTORE_FAILURE_TOPIC` im Wrapper), damit Restore-Probleme auf demselben Handy-Topic landen wie Prometheus-, Docker-, Borg- und Posture-Alarme.
|
|
|
|
## Verwendete Hilfsskripte
|
|
|
|
- `ops/restore-tests/send-ntfy.sh`
|
|
- `ops/restore-tests/run-restore-job-with-ntfy.sh`
|
|
- `ops/restore-tests/run-restore-checks.sh`
|