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?

Shawn J. Goff
sumber
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;
Lekensteyn
sumber
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.

jpalecek
sumber
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.

Nikhil Mulley
sumber
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

kernel.panicadalah sysctl . Ada banyak cara untuk mengkonfigurasi ini, misalnya melalui sysctl.d .

Tobu
sumber
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;
RatDon
sumber
1

Kernel Linux mendukung CONFIG_CMDLINE_BOOL

Izinkan untuk menentukan argumen boot ke kernel pada saat build. Pada beberapa sistem (misalnya yang tertanam), perlu atau nyaman untuk memberikan beberapa atau semua argumen boot kernel dengan kernel itu sendiri (yaitu, untuk tidak mengandalkan boot loader untuk menyediakannya.)

Sudah ada beberapa contoh di "portal" ini, misalnya

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

poige
sumber
0

Anda dapat menggunakan tambalan ini , yang menambahkan opsi konfigurasi.

mgalg
sumber