# 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/-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--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 - `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 ``` ## Stand - die Bash-Jobs wurden am 2026-05-07 hostseitig erfolgreich verifiziert - `freshness`, `vaultwarden`, `gitea` und `paperless` laufen damit prinzipiell automatisch - 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`