Jak wcześnie skonfigurować jądro Linuksa, aby zrestartowało się w razie paniki?

13

Możesz wpisać „panic = N” w wierszu poleceń jądra, aby system uruchomił się ponownie N sekund po panice.

Ale czy istnieje opcja konfiguracji, aby to określić (inna niż domyślna opcja wiersza polecenia jądra), zanim jeszcze uruchomi się moduł ładujący? Może być jakaś opcja jądra?

Shawn J. Goff
źródło
Być może przez podsystem nadzorujący jądro?
Gilles „SO- przestań być zły”,
plik konfiguracyjny to sam plik konfiguracyjny rozruchu (grub), ponieważ jest to parametr wywoływany w czasie rozruchu i nie można oczekiwać, że grub odczyta inny plik konfiguracyjny, gdy system plików nie jest zamontowany.
Nikhil Mulley,
Zakładam, że będziesz chciał zrestartować się do innego jądra? Będzie to wymagało pewnej współpracy ze strony bootloadera, aw tym momencie z pewnością będziesz mógł przekazać argumenty wiersza poleceń. Niektóre moduły ładujące można skonfigurować tak, aby zrestartowały się do innego jądra, jeśli rozruch się nie powiedzie (poprzez program użytkownika wskazujący bootloaderowi, że rozruch się powiódł).
Gilles „SO - przestań być zły”
Tak, będę uruchamiał się albo do innego jądra, albo podałem jądro inną ścieżkę rootfs. W konfiguracji programu ładującego znajduje się zmienna, która zmienia się po pomyślnym uruchomieniu przestrzeni użytkownika; jeśli się nie zmieni, wie, żeby spróbować czegoś innego. Miałem nadzieję na coś więcej niż tylko wiersz poleceń jądra, ponieważ konfigurację bootloadera można modyfikować w przestrzeni użytkownika Linuksa. Jeśli wystąpi problem, prawdopodobnie przestrzeń użytkownika zaczęła pisać, a następnie urządzenie wyłączyło się; i istnieje domyślna konfiguracja rezerwowa; Nadal szukam najbardziej solidnego, jaki mogę to zdobyć.
Shawn J. Goff

Odpowiedzi:

2

Wydaje się, że nie ma takiej opcji konfiguracji. Domyślny limit czasu to 0, co według http://www.mjmwired.net/kernel/Documentation/kernel-parameters.txt#1898 oznacza „czekaj wiecznie”.

Opcja jest zdefiniowana w kernel / panic.c , możesz napisać łatkę, która ustawi wartość początkową na coś innego.

Aby na stałe zresetować komputer po 3 sekundach, zmień:

int panic_timeout;

do:

int panic_timeout = 3;
Lekensteyn
źródło
Słaba porada, aby majstrować przy źródłach, gdy istnieje specjalny mechanizm: unix.stackexchange.com/a/517364/6622
poige
19

Od man proc:

/ proc / sys / kernel / panic

Ten plik daje dostęp do odczytu / zapisu do zmiennej jądra panic_timeout. Jeśli jest to zero, jądro zapętli się w panice; jeśli niezerowe, oznacza to, że jądro powinno się automatycznie zrestartować po tej liczbie sekund. Podczas korzystania ze sterownika urządzenia nadzorującego oprogramowanie zalecane ustawienie to 60.

jpalecek
źródło
Szukam tutaj opcji konfiguracji jądra, a nie czegoś z przestrzeni użytkownika. W szczególności, jeśli z jakiegoś powodu nie może zamontować głównego systemu plików (lub z innego powodu przestrzeń użytkownika nigdy się nie pojawia), muszę go zrestartować.
Shawn J. Goff,
@ ShawnJ.Goff Jeśli obawiasz się również, że przestrzeń użytkownika nie pojawi się, zadajesz złe pytanie (chcesz zrestartować się, nawet jeśli jądro się nie panikuje). Odpowiedź jest z definicji formą nadzoru; musisz aktywować podsystem watchdog (uruchomienie restartu, jeśli /dev/watchdognie było dotykane od dłuższego czasu). Zobaczyć Documentation/watchdog/watchdog-api.txt.
Gilles „SO- przestań być zły”
1
Tak, mam strażnika. Po prostu zakładam jak najwięcej siatek bezpieczeństwa.
Shawn J. Goff
Jakikolwiek sposób na zamknięcie zamiast ponownego uruchomienia?
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件
@ Program ładujący ShawnJ.Goff obsługuje przekazywanie tego parametru na długo przed uruchomieniem przestrzeni użytkownika. W każdym razie zobacz moją odpowiedź: unix.stackexchange.com/a/517364/6622
poige
5

Plik konfiguracyjny to sam plik konfiguracyjny rozruchu (grub), ponieważ jest to parametr wywoływany w czasie rozruchu i nie można oczekiwać, że grub odczyta inny plik konfiguracyjny, gdy system plików nie jest zamontowany.

Ponieważ jest to ustawienie zainicjowane, środowisko wykonawcze można również zmodyfikować sysctl. Zasadniczo aktualizacja za /etc/sysctl.confpomocą parametru kernel.panic = 3jest aktualizacją konfiguracji.

Nikhil Mulley
źródło
1
grub nie jest dostępny we wszystkich systemach; ten, z którym pracuję, nie używa grub. Konfiguracja mojego bootloadera jest zapisana we flashu.
Shawn J. Goff,
tak, nadal… czy może zamontować system plików i odczytać plik konfiguracyjny jądra? jeśli tak, to proszę bardzo. Ponieważ jest to moduł ładujący, który przekazuje parametry jądra do jądra podczas ładowania jądra.
Nikhil Mulley,
3

kernel.panicto sysctl . Istnieje wiele sposobów ich konfiguracji, na przykład poprzez sysctl.d .

Tobu
źródło
3

W jądrze Linuksa (widziałem w 3 i wyżej) jest opcja w .config. CONFIG_PANIC_TIMEOUTjest parametrem i domyślnie jest to 0. W tych wersjach jądra Linuksa odpowiedź Lekensteyn również będzie działać. Ale ta zmienna bierze się od .configjedynych.

int panic_timeout = CONFIG_PANIC_TIMEOUT;
RatDon
źródło
1

Obsługa jądra Linux CONFIG_CMDLINE_BOOL

Zezwól na podanie argumentów rozruchowych jądra w czasie kompilacji. W niektórych systemach (np. Wbudowanych) konieczne lub wygodne jest dostarczenie niektórych lub wszystkich argumentów rozruchowych jądra z samym jądrem (to znaczy, aby nie polegać na module ładującym rozruchu, aby je dostarczyć).

Istnieje nawet kilka przykładów na tym „portalu”, na przykład

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

poige
źródło
0

Możesz użyć tej poprawki, która dodaje opcję konfiguracji.

mgalgs
źródło