Wie konfiguriere ich den Linux-Kernel frühzeitig für einen Neustart in Panik?

13

Sie können "panic = N" in die Kernel-Befehlszeile eingeben, damit das System N Sekunden nach einer Panik neu gestartet wird.

Aber gibt es eine Konfigurationsoption, um dies festzulegen (anders als die Standard-Kernel-Befehlszeilenoption), bevor sogar der Bootloader ins Spiel kommt? Einige Kernel-Option kann sein?

Shawn J. Goff
quelle
Vielleicht über das Kernel-Watchdog-Subsystem?
Gilles 'SO- hör auf böse zu sein'
Die Konfigurationsdatei ist die Startkonfigurationsdatei (Grub) selbst, da sie ein Parameter ist, der zum Startzeitpunkt aufgerufen wird und von Grub nicht erwartet werden kann, dass er aus einer anderen Konfigurationsdatei liest, während das Dateisystem nicht gemountet ist.
Nikhil Mulley
Ich nehme an, Sie möchten einen anderen Kernel starten? Dazu muss der Bootloader etwas mitarbeiten, und an diesem Punkt können Sie sicherlich Befehlszeilenargumente übergeben. Einige Bootloader können so eingerichtet werden, dass sie bei einem fehlgeschlagenen Start auf einem anderen Kernel neu starten (indem ein Userland-Programm dem Bootloader anzeigt, dass der Start erfolgreich war).
Gilles 'SO- hör auf böse zu sein'
Ja, ich werde entweder auf einem anderen Kernel booten oder dem Kernel einen anderen rootfs-Pfad zuweisen. Es gibt eine Variable in der Bootloader-Konfiguration, die geändert wird, wenn der Userspace erfolgreich gestartet wird. Wenn es sich nicht ändert, kann es etwas anderes ausprobieren. Ich hatte gehofft, dass dies nicht nur die Kernel-Befehlszeile betrifft, da die Bootloader-Konfiguration vom Linux-Benutzerraum geändert werden kann. Wenn es ein Problem gibt, hat der Benutzerraum wahrscheinlich mit dem Schreiben begonnen, und das Gerät wurde ausgeschaltet. und dafür gibt es eine Fallback-Standardkonfiguration; Ich bin immer noch auf der Suche nach den soliden, die ich bekommen kann.
Shawn J. Goff

Antworten:

19

Von man proc:

/ proc / sys / kernel / panic

Diese Datei gibt Lese- / Schreibzugriff auf die Kernelvariable panic_timeout. Wenn dies Null ist, wird sich der Kernel in einer Panikschleife befinden. Wenn der Wert nicht Null ist, wird angegeben, dass der Kernel nach dieser Anzahl von Sekunden automatisch gestartet werden soll. Wenn Sie den Software Watchdog-Gerätetreiber verwenden, wird eine Einstellung von 60 empfohlen.

jpalecek
quelle
Ich suche hier eine Kernel-Konfigurationsoption, nicht etwas von Userspace. Insbesondere, wenn aus irgendeinem Grund das Root-Dateisystem nicht eingehängt werden kann (oder aus einem anderen Grund der Benutzerbereich nie angezeigt wird), muss es neu gestartet werden.
Shawn J. Goff
@ ShawnJ.Goff Wenn Sie auch Bedenken haben, dass der Benutzerraum nicht verfügbar ist, stellen Sie die falsche Frage (Sie möchten einen Neustart durchführen, auch wenn der Kernel nicht in Panik gerät). Und die Antwort ist per Definition eine Art Wachhund; Sie müssen das Watchdog-Subsystem aktivieren (einen Neustart auslösen, wenn /dev/watchdoges längere Zeit nicht berührt wurde). Sehen Documentation/watchdog/watchdog-api.txt.
Gilles 'SO- hör auf böse zu sein'
1
Ja, ich habe einen Wachhund. Ich bringe nur so viele Sicherheitsnetze wie möglich an.
Shawn J. Goff
Irgendeine Möglichkeit zum Herunterfahren statt Neustarten?
Ciro Santilli am
@ ShawnJ.Goff Bootloader unterstützt die Weitergabe dieses Parameters, lange bevor der Userspace gebootet wird. Wie auch immer, siehe meine Antwort: unix.stackexchange.com/a/517364/6622
Poige
5

Die Konfigurationsdatei ist die Startkonfigurationsdatei (Grub) selbst, da sie ein Parameter ist, der zum Startzeitpunkt aufgerufen wird und von Grub nicht erwartet werden kann, dass er aus einer anderen Konfigurationsdatei liest, während das Dateisystem nicht gemountet ist.

Da dies jedoch eine initialisierte Einstellung ist, kann die Laufzeit auch über geändert werden sysctl. Die Aktualisierung /etc/sysctl.confmit Parametern kernel.panic = 3ist also im Wesentlichen eine Konfigurationsaktualisierung.

Nikhil Mulley
quelle
1
Grub ist nicht auf allen Systemen; Der, mit dem ich arbeite, benutzt kein Grub. Die Konfiguration meines Bootloaders ist in Flash gespeichert.
Shawn J. Goff
Kann es das Dateisystem mounten und die Kernel-Konfigurationsdatei lesen? wenn ja, dann geht es los. Denn es ist der Bootloader, der die Kernel-Parameter beim Laden des Kernels an den Kernel übergibt.
Nikhil Mulley
3

kernel.panicist ein sysctl . Es gibt viele Möglichkeiten, diese zu konfigurieren, beispielsweise über sysctl.d .

Tobu
quelle
3

In Linux Kernel (ich habe in 3 und höher gesehen) gibt es eine Option in der .config. CONFIG_PANIC_TIMEOUTist der Parameter und standardmäßig 0. In diesen Versionen des Linux-Kernels funktioniert die Antwort von Lekensteyn ebenfalls. Aber diese Variable nimmt .confignur aus.

int panic_timeout = CONFIG_PANIC_TIMEOUT;
RatDon
quelle
1

Linux-Kernel unterstützt CONFIG_CMDLINE_BOOL

Geben Sie beim Erstellen des Kernels Startargumente an. Auf einigen Systemen (z. B. eingebetteten Systemen) ist es erforderlich oder zweckmäßig, einige oder alle Kernel-Boot-Argumente mit dem Kernel selbst zu versehen (d. H. Sich nicht auf den Bootloader zu verlassen, um sie bereitzustellen).

Auch auf diesem "Portal" gibt es einige Beispiele, z

/superuser/778826/config-cmdline-override-set-but-hardcoded-vga-boot-parameter-ignored

Poige
quelle
0

Sie können diesen Patch verwenden, der eine Konfigurationsoption hinzufügt.

mgalgs
quelle