nearline: S4U-Root-Cause dokumentiert + Exitcode-Leak gefixt
Diagnose 2026-06-21: Der Scheduled Task "KalliLab H Drive Nearline Pull" lief als LogonType S4U (ohne gespeichertes Passwort) und hatte damit keine Netzwerk-Anmeldeinformationen fuer den SMB-Share \192.168.178.58\backups. Jeder geplante 05:30-Lauf brach still mit Exit 1 ab, ohne Report; der Nearline-Spiegel war 2026-06-19 bis 2026-06-21 veraltet. Manuell nachgezogen, Spiegel wieder frisch. pull-critical-backups.ps1: explizites `exit 0` auf dem Erfolgspfad, damit der letzte robocopy-Exitcode (1 = "Dateien kopiert") nicht als Prozess-Exit leakt und der Scheduled Task ein wahrheitsgemaesses Ergebnis meldet. README: Pflicht-Hinweis, dass der Task mit gespeichertem Passwort (nicht S4U) laufen muss. MASTER_TODO: Root-Cause + verbleibender Operator-Schritt. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+1
-1
@@ -25,7 +25,7 @@ Host-Reports (`/mnt/user/backups/restore-reports/`) und in der Git-Historie.
|
|||||||
| Restore-Test Tailscale | Operator | State-Validierung + Reconnect nur auf Wegwerf-Host/VM, danach Geraet in Tailscale-Admin entfernen | `ops/restore-tests/tailscale-runbook.md` |
|
| Restore-Test Tailscale | Operator | State-Validierung + Reconnect nur auf Wegwerf-Host/VM, danach Geraet in Tailscale-Admin entfernen | `ops/restore-tests/tailscale-runbook.md` |
|
||||||
| Authelia OIDC fuer Apps | Operator/Codex | Live: Grafana + Mealie login-verifiziert; Paperless Secret verdrahtet und Service-Smoke am 2026-06-17 gruen, finaler Browser-Login mit Operator-Account offen. Immich + Nextcloud bewusst geparkt bis Family-Onboarding (siehe `docs/DECISIONS.md` 2026-06-06) | `docs/AUTHELIA_OIDC_PLAN.md` |
|
| Authelia OIDC fuer Apps | Operator/Codex | Live: Grafana + Mealie login-verifiziert; Paperless Secret verdrahtet und Service-Smoke am 2026-06-17 gruen, finaler Browser-Login mit Operator-Account offen. Immich + Nextcloud bewusst geparkt bis Family-Onboarding (siehe `docs/DECISIONS.md` 2026-06-06) | `docs/AUTHELIA_OIDC_PLAN.md` |
|
||||||
| Home Assistant Tibber | Operator/Codex | Tibber per HA-UI-Config-Flow verbinden. Danach Energy-Dashboard um echte Kosten/Preisquelle ergaenzen; SolarEdge-PV, Netz und Speicher sind bereits konfiguriert und validiert | `docs/runbooks/smart-home-bootstrap.md`, `docs/DECISIONS.md` |
|
| Home Assistant Tibber | Operator/Codex | Tibber per HA-UI-Config-Flow verbinden. Danach Energy-Dashboard um echte Kosten/Preisquelle ergaenzen; SolarEdge-PV, Netz und Speicher sind bereits konfiguriert und validiert | `docs/runbooks/smart-home-bootstrap.md`, `docs/DECISIONS.md` |
|
||||||
| Nearline-Pull Dead-Man's-Switch | Operator | Heartbeat-Pings (`/start`, `/fail`, Erfolg) sind lokal in `pull-critical-backups.ps1` und `ops/borg-ui/scripts/pre-borg.sh` verdrahtet (endpoint-agnostisch, No-Op ohne URL). **Verbleibt:** Operator legt je einen Healthchecks-Check an, hinterlegt die Capability-URL (baerchen: ENV `HEALTHCHECKS_NEARLINE_URL` bzw. `%USERPROFILE%\.kallilab\…`; Unraid: `/mnt/user/appdata/secrets/healthchecks_borg_url`) und macht je einen Testlauf | `ops/h-drive-nearline/README.md` |
|
| Nearline-Pull Dead-Man's-Switch + S4U-Fix | Operator | **Root-Cause 2026-06-21:** Scheduled Task `KalliLab H Drive Nearline Pull` lief als LogonType S4U (kein gespeichertes Passwort) -> keine SMB-Netz-Creds -> jeder 05:30-Lauf brach still ab; Spiegel war 19.-21.06. veraltet. Manuell nachgezogen (Stand: 21.06.-04:00-Dumps), Heartbeat-Pings + Exit-Code-Fix in `pull-critical-backups.ps1`/`pre-borg.sh` gepusht. **Verbleibt (braucht Windows-Passwort des Operators):** Task auf "Run whether logged on or not" MIT gespeichertem Passwort umstellen (LogonType Password); dann je einen Healthchecks-Check anlegen + Capability-URL hinterlegen (baerchen ENV `HEALTHCHECKS_NEARLINE_URL`/Datei; Unraid `/mnt/user/appdata/secrets/healthchecks_borg_url`) | `ops/h-drive-nearline/README.md` |
|
||||||
| Monitoring Single-File-Bind-Mount Hardening | Operator/Claude | alertmanager/blackbox/loki/promtail + alertmanager-ntfy-bridge lokal auf Directory-Mounts umgestellt (grafana-provisioning war bereits Directory-Mount); `docker compose config` gruen. **Verbleibt:** Push + Komodo-Redeploy des monitoring-Stacks mit `--force-recreate` (Mount-Pfade aendern sich), danach Reload-/Alert-Smoke | `monitoring/docker-compose.yml` |
|
| Monitoring Single-File-Bind-Mount Hardening | Operator/Claude | alertmanager/blackbox/loki/promtail + alertmanager-ntfy-bridge lokal auf Directory-Mounts umgestellt (grafana-provisioning war bereits Directory-Mount); `docker compose config` gruen. **Verbleibt:** Push + Komodo-Redeploy des monitoring-Stacks mit `--force-recreate` (Mount-Pfade aendern sich), danach Reload-/Alert-Smoke | `monitoring/docker-compose.yml` |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|||||||
@@ -35,7 +35,20 @@ Abschluss zu löschen.
|
|||||||
Der Windows Scheduled Task `KalliLab H Drive Nearline Pull` laeuft seit
|
Der Windows Scheduled Task `KalliLab H Drive Nearline Pull` laeuft seit
|
||||||
2026-05-28 taeglich 05:30. Das Script kopiert bewusst **nicht** mit `/MIR` und
|
2026-05-28 taeglich 05:30. Das Script kopiert bewusst **nicht** mit `/MIR` und
|
||||||
loescht nichts auf H:/; alte Artefakte werden nur nach manueller Sichtpruefung
|
loescht nichts auf H:/; alte Artefakte werden nur nach manueller Sichtpruefung
|
||||||
entfernt. Aufruf zum Testen:
|
entfernt.
|
||||||
|
|
||||||
|
> **Wichtig — Task-LogonType:** Der Task muss mit "Ausfuehren, auch wenn der
|
||||||
|
> Benutzer nicht angemeldet ist" **und gespeichertem Passwort** laufen
|
||||||
|
> (LogonType `Password`). Mit `S4U` (ohne gespeichertes Passwort) hat der Lauf
|
||||||
|
> keine Netzwerk-Anmeldeinformationen und erreicht den authentifizierten
|
||||||
|
> SMB-Share `\\192.168.178.58\backups` nicht -> jeder geplante Lauf bricht
|
||||||
|
> still mit Exitcode 1 ab, ohne Report. Genau das passierte 2026-06-19 bis
|
||||||
|
> 2026-06-21 (Spiegel still veraltet), bis am 2026-06-21 manuell nachgezogen
|
||||||
|
> wurde. Manuelle Laeufe in einer interaktiven Sitzung funktionieren, weil die
|
||||||
|
> Sitzung die SMB-Creds hat. Das ist auch der Grund fuer den externen
|
||||||
|
> Dead-Man's-Switch unten.
|
||||||
|
|
||||||
|
Aufruf zum Testen:
|
||||||
|
|
||||||
```powershell
|
```powershell
|
||||||
powershell.exe -NoProfile -ExecutionPolicy Bypass -File G:\Gitea_Clone\homelab-infra\ops\h-drive-nearline\pull-critical-backups.ps1 -WhatIf
|
powershell.exe -NoProfile -ExecutionPolicy Bypass -File G:\Gitea_Clone\homelab-infra\ops\h-drive-nearline\pull-critical-backups.ps1 -WhatIf
|
||||||
|
|||||||
@@ -216,6 +216,10 @@ try {
|
|||||||
Write-Host "Report: $reportPath"
|
Write-Host "Report: $reportPath"
|
||||||
|
|
||||||
Send-HealthcheckPing
|
Send-HealthcheckPing
|
||||||
|
# Explizit erfolgreich beenden: sonst leakt der letzte robocopy-Exitcode
|
||||||
|
# (1 = "Dateien kopiert") als Prozess-Exit und der Scheduled Task meldet
|
||||||
|
# 0x1, obwohl der Lauf sauber war.
|
||||||
|
exit 0
|
||||||
} catch {
|
} catch {
|
||||||
Send-HealthcheckPing "/fail"
|
Send-HealthcheckPing "/fail"
|
||||||
throw
|
throw
|
||||||
|
|||||||
Reference in New Issue
Block a user