KamoCRM

Ein Computer könnte nie wieder in der Lage zu schlafen starten

FixKlusterServices
Verschickt
23. September 2026 um 19:02 UTC
Autor
Kamo
Commit
2266930

Der erste echte Hosted Computer erreichte AWAKE und blieb dann für immer wach. Überwölkung gemeldet Lebenslauf Konfiguriert: falsch, IdleWatcher nur Arme, wenn die Bereitschaft wahr ist, so dass die Maschine hielt einen Knoten Speicher mit nichts zu zeigen, aber ein letztesError niemand liest. Die Verdrahtung war auf der Festplatte korrekt - das grub.d Fragment, der initramfs Haken, die Swapfile in fstab, und resume=UUID=... resume_Offset=... in der generierten grub.cfg. Was nie passiert ist, war der Neustart das alles auf /proc/cmdline setzt, was der einzige Ort ist, von dem der Kernel es liest. Der Neustart war an die Bedingung geknüpft, dass configure() berichtet, dass er gerade die Verkabelung geschrieben hatte. configure() wird von zwei Stellen aufgerufen: dem Boot-Thread des Agenten, bei jedem Start, und /vorbereiten-schlafen, welche Computeservice POSTs am Ende der Bereitstellung. Auf dieser Maschine überlappten sie das Boot-Gefaden fertig Update-grub 40 Millisekunden NACH dem POST angekommen, so dass die POST-Konfiguration() gefunden beide Die Dateien sind bereits korrekt, meldeten keine Änderung und übersprangen den Neustart. Korrekter Code, beide Anrufer tun ihre Arbeit, dauerhafte Stillstand, und nicht ein Fehler irgendwo. Also fragt die Entscheidung nicht mehr, wer eine Datei geschrieben hat. resume_restart_decision() fragt den Staat: Der Kernel hat keinen Lebenslauf=, ein Boot könnte das beheben, und die Verkabelung ist bereits in grub.cfg. Beide Anti-Loop-Wächter sind tragend, weil der Ausfallmodus auf der anderen Seite neu startet Jemands Computer in einem Zyklus: - grub.cfg muss bereits die genaue Zeichenfolge tragen. update-grub läuft mit check=False, so dass es ausfällt ist real, und neustartet, ohne dass es in die identische Kommandozeile neu gestartet. - ein Stempel unter /var/lib/kamo-hc records, für WAS wurde neu gestartet und überlebt den Neustart Wachen. Gleiche Verdrahtung bedeutet zweimal, dass der Kernel die Kommandozeile und einen zweiten Neustart fallen lässt. würde nicht helfen. Eine Swapfile, die MOVED ist eine andere Zeichenfolge, und verdient einen neuen Versuch. Jeder Weg protokolliert, Verweigerungen eingeschlossen. Der Fehler war in beide Richtungen gleichzeitig still: nichts neu gestartet und nichts sagte, warum nicht. configure() wird jetzt auch serialisiert. Diese beiden Anrufer liefen Update-Initramfs gegen die gleiche initrd gleichzeitig, was eher Glück als Design war. Der Boot-Thread erhält die gleiche Selbstheilung, gated auf config.json vorhanden: auf einem ersten Boot die Rückstellung Push ist noch nicht gelandet und Neustart würde die Maschine aus unter ihm ziehen, aber auf jeder Boot danach ist es, was einen Computer, dessen Lebenslauf Offset eine Kernel-Upgrade ungenutzt, wiederhergestellt, ohne zu warten, um gefragt zu werden. Neun Tests. Die eine, die darauf ankommt, behauptet, dass ein Anrufer sehen "keine Änderung" immer noch bekommt den Neustart die alte Suite testete den Mechanismus und bestanden, während das System festgefahren.

Alle Änderungen anzeigen

Wie das, was Sie sehen Versand?

Beginnen Sie mit dem kostenlosen Plan und lesen Sie diese Seite in einem Monat erneut, um zu sehen, ob Sie die neuen Funktionen nutzen möchten.

Kostenlos für immer startenPreise anzeigen