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?


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:


2

Es scheint keine solche Konfigurationsoption zu geben. Das Standard-Timeout ist 0, was laut http://www.mjmwired.net/kernel/Documentation/kernel-parameters.txt#1898 "für immer warten" ist.

Die Option ist in kernel / panic.c definiert . Sie können einen Patch schreiben, der den Anfangswert auf einen anderen Wert setzt.

Um einen Neustart nach 3 Sekunden fest zu codieren, ändern Sie Folgendes:

int panic_timeout;

zu:

int panic_timeout = 3;

Es ist nicht ratsam, an
poige

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.


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.


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 .


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;

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



Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.