Waechter merkt jetzt, wenn die naechtliche Sicherung ausfaellt
Beim Nachweis des ersten automatischen Laufs gefunden: Der Cron-Eintrag endet auf >/dev/null 2>&1 -- jede Fehlermeldung wird verworfen. Das Sicherungsskript fuehrt zwar ein eigenes Protokoll, aber alles, was VOR der ersten Protokollzeile schiefgeht (Skript geloescht, sqlite3 weg, Platte voll, Cron gestoppt), passiert spurlos. Niemand haette es gemerkt -- ausser in dem Moment, in dem man die Sicherung braucht. Der Waechter prueft ab sofort die Datei selbst, nicht das Protokoll: Ein Protokoll kann "erfolgreich" melden, waehrend die Datei fehlt. In lib/ ausgelagert, weil waechter.mjs beim Import sofort seinen ganzen Durchlauf startet -- testbar war die Funktion dort nicht. Beim Testentwurf einen eigenen Fehler gefunden: readdirSync wirft sowohl bei fehlendem Ordner (ENOENT) als auch bei fehlenden Rechten (EACCES). Die erste Fassung behandelte beides als "kein Urteil" und haette damit einen geloeschten Sicherungsordner verschwiegen. Jetzt getrennt: ENOENT meldet, EACCES schweigt. Die 26-Stunden-Grenze ist bewusst nicht enger: Kurz vor dem naechsten Lauf ist die juengste Sicherung regulaer 24 Stunden alt. Genau dort entstehen die Fehlalarme, nach denen man die Meldungen abschaltet -- und dann geht der eine echte mit unter. Als eigener Testfall abgesichert. 14 von 14 Pruefungen bestanden. Co-Authored-By: Claude Opus 5 <[email protected]>
This commit is contained in:
@@ -42,6 +42,7 @@ import { dirname, join } from "node:path";
|
||||
import { fileURLToPath } from "node:url";
|
||||
import tls from "node:tls";
|
||||
import { senden } from "./lib/webpush.js";
|
||||
import { sicherungZustand } from "./lib/sicherung-pruefen.js";
|
||||
|
||||
const __dirname = dirname(fileURLToPath(import.meta.url));
|
||||
const DB = "/var/lib/dogfather-internal/dogfather-internal.db";
|
||||
@@ -400,6 +401,16 @@ beschreibung["platte"] = p.heil
|
||||
? `Plattenplatz wieder in Ordnung (${p.belegt}%)`
|
||||
: `Platte zu ${p.belegt}% belegt`;
|
||||
|
||||
/* Kein Urteil (null) heisst: alten Zustand stehen lassen, nicht melden --
|
||||
dasselbe Vorgehen wie beim Zertifikat weiter unten. */
|
||||
const sich = sicherungZustand();
|
||||
if (sich) {
|
||||
jetzt["sicherung"] = sich.heil;
|
||||
beschreibung["sicherung"] = sich.heil
|
||||
? `Sicherung laeuft wieder (${sich.grund})`
|
||||
: `SICHERUNG FEHLT: ${sich.grund}`;
|
||||
}
|
||||
|
||||
for (const host of ["dogfather-universe.com", "vans-diy-bastelbedarf.com"]) {
|
||||
const tage = await zertifikatTage(host);
|
||||
/* Kein Ergebnis heisst NICHT "kaputt" -- ein kurzer Netzhaenger darf
|
||||
|
||||
Reference in New Issue
Block a user