Bagaimana cara mengkonfigurasi kernel Linux untuk reboot dengan panik?


13

Anda dapat menempatkan "panic = N" pada baris perintah kernel untuk membuat sistem reboot N detik setelah panik.

Tetapi apakah ada opsi konfigurasi untuk menentukan ini (selain opsi baris perintah kernel default) sebelum bahkan boot loader ikut bermain? Beberapa opsi kernel mungkin?


Melalui subsistem pengawas kernel, mungkin?
Gilles 'SO- stop being evil'

file config adalah file konfigurasi boot (grub) itu sendiri, karena ini adalah parameter yang dipanggil pada saat boot dan grub tidak dapat diharapkan untuk membaca dari beberapa file config lainnya ketika sistem file tidak di-mount.
Nikhil Mulley

Saya kira Anda ingin reboot ke kernel yang berbeda? Itu akan membutuhkan kerja sama dari bootloader, dan pada saat itu, Anda pasti akan dapat melewati argumen baris perintah. Beberapa bootloader dapat diatur untuk reboot ke kernel yang berbeda jika boot gagal (dengan memiliki program userland menunjukkan ke bootloader bahwa boot berhasil).
Gilles 'SANGAT berhenti menjadi jahat'

Ya, saya akan mem-boot baik ke kernel yang berbeda, atau memberikan path rootfs kernel yang berbeda. Ada variabel dalam konfigurasi bootloader yang berubah ketika userspace melakukan booting dengan sukses; jika tidak berubah, ia tahu untuk mencoba sesuatu yang berbeda. Saya berharap untuk sesuatu yang lebih dari sekedar baris perintah kernel untuk ini karena konfigurasi bootloader dapat dimodifikasi oleh ruang pengguna Linux. Jika ada masalah, kemungkinan userspace mulai menulis, kemudian perangkat dimatikan; dan ada konfigurasi default fallback untuk itu; Saya masih mencari yang paling solid yang bisa saya dapatkan ini.
Shawn J. Goff

Jawaban:


2

Tampaknya tidak ada opsi konfigurasi. Batas waktu default adalah 0 yang menurut http://www.mjmwired.net/kernel/Documentation/kernel-parameters.txt#1898 adalah "tunggu selamanya".

Opsi ini didefinisikan di kernel / panic.c , Anda dapat menulis tambalan yang menetapkan nilai awal ke sesuatu yang berbeda.

Untuk membuat hardcode reboot setelah 3 detik, ubah:

int panic_timeout;

untuk:

int panic_timeout = 3;

Adalah saran yang buruk untuk mengutak-atik sumber ketika ada mekanisme khusus: unix.stackexchange.com/a/517364/6622
poige

19

Dari man proc:

/ proc / sys / kernel / panic

File ini memberikan akses baca / tulis ke panic_timeout variabel kernel. Jika ini nol, kernel akan mengulang panik; jika bukan nol itu menunjukkan bahwa kernel harus melakukan boot otomatis setelah jumlah detik ini. Saat Anda menggunakan driver perangkat pengawas perangkat lunak, pengaturan yang disarankan adalah 60.


Saya mencari opsi konfigurasi kernel di sini, bukan sesuatu dari userspace. Secara khusus, jika karena alasan tertentu, itu tidak dapat me-mount sistem file root (atau karena alasan lain, userspace tidak pernah muncul), saya memerlukannya untuk reboot.
Shawn J. Goff

@ ShawnJ.Goff Jika Anda juga khawatir tentang userspace tidak muncul, maka Anda mengajukan pertanyaan yang salah (Anda ingin me-reboot bahkan jika kernel tidak panik). Dan jawabannya adalah bentuk anjing penjaga menurut definisi; Anda perlu mengaktifkan subsistem pengawas (memicu reboot jika /dev/watchdogbelum disentuh dalam beberapa saat). Lihat Documentation/watchdog/watchdog-api.txt.
Gilles 'SO- stop being evil'

1
Ya, saya punya anjing penjaga. Saya hanya menempatkan jaring pengaman sebanyak mungkin.
Shawn J. Goff

Adakah cara untuk mematikan daripada mem-boot ulang?
Ciro Santilli 新疆 改造 中心 法轮功 六四 事件

@ ShawnJ.Goff boot loader mendukung untuk meneruskan parameter ini jauh sebelum userspace di-boot. Bagaimanapun, lihat jawaban saya: unix.stackexchange.com/a/517364/6622
poige

5

File config adalah file konfigurasi boot (grub) itu sendiri, karena ini adalah parameter yang dipanggil pada saat boot dan grub tidak dapat diharapkan untuk membaca dari beberapa file config lainnya ketika sistem file tidak di-mount.

Namun, itu menjadi pengaturan yang diinisialisasi, runtime juga dapat dimodifikasi sysctl. Jadi, pada dasarnya memperbarui /etc/sysctl.confdengan parameter kernel.panic = 3adalah pembaruan konfigurasi.


1
grub tidak ada di semua sistem; yang saya kerjakan tidak menggunakan grub. Konfigurasi bootloader saya disimpan dalam flash.
Shawn J. Goff

ya, masih .. bisakah ia me-mount sistem file dan membaca file konfigurasi kernel? jika ya, maka itu dia. Karena ini boot loader yang meneruskan parameter kernel ke kernel saat memuat kernel.
Nikhil Mulley


3

Di Linux Kernel, (saya telah melihat 3 dan di atas) ada opsi di .config. CONFIG_PANIC_TIMEOUTadalah parameter dan default ke 0. Dalam versi kernel Linux ini, jawaban Lekensteyn juga akan berfungsi. Tetapi variabel itu mengambil dari .configsatu - satunya.

int panic_timeout = CONFIG_PANIC_TIMEOUT;


0

Anda dapat menggunakan tambalan ini , yang menambahkan opsi konfigurasi.


Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.