綾小路龍之介の素人思考

[Linux] カーネルパニックで強制再起動

サービスを提供しているコンピュータで、障害が起きた時、自動的に再起動したい。原因の追求よりサービスの持続性が重要視されるケースではカーネルパニックが起きたら強制再起動。

設定変更前に、現在のカーネルの panic 関連設定を表示。sysctl -a か各パラメータに対応するファイルを参照する。

# sysctl -a | grep panic
kernel.panic = 0
kernel.panic_on_oops = 0
kernel.softlockup_panic = 0
kernel.unknown_nmi_panic = 0
kernel.panic_on_unrecovered_nmi = 0
kernel.panic_on_io_nmi = 0
kernel.hung_task_panic = 0
vm.panic_on_oom = 0
# cat /proc/sys/kernel/panic
0
# cat /proc/sys/kernel/panic_on_oops
0

カーネルパラメータを変更するには sysctl -w を使う。反映されているかも確認。

# sysctl -w kernel.panic=60
kernel.panic = 60
# cat /proc/sys/kernel/panic
60
# sysctl -w kernel.panic_on_oops=1
kernel.panic_on_oops = 1
# cat /proc/sys/kernel/panic_on_oops
1
# sysctl -a | grep panic
kernel.panic = 60
kernel.panic_on_oops = 1
kernel.softlockup_panic = 0
kernel.unknown_nmi_panic = 0
kernel.panic_on_unrecovered_nmi = 0
kernel.panic_on_io_nmi = 0
kernel.hung_task_panic = 0
vm.panic_on_oom = 0

再起動後もパラメータを反映させたい、永続的にパラメータを使いたい場合は、/etc/sysctl.conf または /etc/sysctl.d/*.conf に書き込む。反映させるには sysctl -p。

# cat <<EOT>> /etc/sysctl.d/local.conf
kernel.panic = 60
kernel.panic_on_oops = 1
EOT
# sysctl -p
kernel.panic = 60
kernel.panic_on_oops = 1

意図的にカーネルパニックを発生させて、設定のテストを行う。

# sysctl -a | grep sys
kernel.sysrq = 438
# cat /proc/sys/kernel/sysrq
438
# echo 1 > /proc/sys/kernel/sysrq
# cat /proc/sys/kernel/sysrq
1
# echo c > /proc/sysrq-trigger

リファレンス

  1. sysctl でカーネルパラメータを変更する - いますぐ実践! Linuxシステム管理 / Vol.240
  2. passingloop • カーネルパニックからの自動復旧
  3. Linuxでウオッチドッグ機能を使用する パソコン鳥のブログ/ウェブリブログ
  4. >Linuxのカーネルパニック : 青空Linux
  5. magic SysRq keyについて | Miracle Linux Support
  6. Linux暴走時にやる奥の手(Magic System Request Key) | INSANEWORKS,LLC

ソーシャルブックマーク

  1. はてなブックマーク
  2. Google Bookmarks
  3. del.icio.us

ChangeLog

  1. Posted: 2008-08-11T02:34:51+09:00
  2. Modified: 2008-08-11T02:34:51+09:00
  3. Generated: 2017-06-08T23:09:19+09:00