Linuxでカーネルパニックをコマンドで簡単に発生させることができます。
以下にカーネルパニックの発生コマンドとカーネルパニック後、指定した秒を経過すると再起動するようにする設定方法を記します。
以下のコマンドで簡単にカーネルパニックを発生させることができます。
尚、本コマンドはrootユーザで実行してください。
echo c > /proc/sysrq-trigger
X11が動作しており、端末を起動してカーネルパニックを発生させるコマンドを実行しても何も表示されないと思います。
以下のスクリーンショットは、仮想コンソールにしてコマンドを実行すれば以下のような表示をみることができます。
GUIが動作している時は、Ctrl+Alt+F1などのようにすれば、仮想コンソールが表示されます。
VirtualBoxを利用してカーネルパニックを発生させました。
上記のコマンドでカーネルパニックを発生させると上記のカーネルパニックスクリーンショット画面で止まってします。
例えばデータセンターにあるサーバでカーネルパニックを起こした場合、データセンターに行かないと再起動できなくなります。
(サーバーなので、他の方法で対処する機能を持ったサーバー機器もありますが…)
以下のようなオペレーションをすることにより、カーネルパニック後、指定した時間を経過すると再起動されるようになります。
kernel.panicのパラメータに0が指定されている場合、再起動しません。
以下のコマンドで確認することができます。
cat /proc/sys/kernel/panic
または
sysctl kernel.panic
上記コマンドを実行した出力結果です。
両方共0が表示され、デフォルトでは再起動しないように設定されているのが確認できます。
[sakura@centos6 ~]$ cat /proc/sys/kernel/panic 0 [sakura@centos6 ~]$ sysctl kernel.panic kernel.panic = 0
この値を0以外に変更するとリブートするようになります。
値は秒になります。
以下のコマンドで一時的な対応が可能です。
rootユーザにて作業を行なってください。
echo 秒 > /proc/sys/kernel/panic
一時的な対応を説明すると以下のコマンドを発行した場合、
カーネルパニック後30秒後に再起動されます。
しかし再起動後は30秒と指定した値は0に戻ってしまい再度カーネルパニックが発生した場合、再起動しません。
echo 30 > /proc/sys/kernel/panic
以下の操作により恒久的な対応が可能になります。
rootユーザにて作業を行なってください。
本記事で動作確認を行ったCentOS6では、kernel.panicの設定がありませんでしたので追加作業になりました。
kernel.panic = 30
sysctl -p以下事項したときの出力です。
[root@centos6 ~]# sysctl kernel.panic kernel.panic = 0
[root@centos6 ~]# sysctl -p net.ipv4.ip_forward = 0 net.ipv4.conf.default.rp_filter = 1 net.ipv4.conf.default.accept_source_route = 0 kernel.sysrq = 0 kernel.core_uses_pid = 1 <省略> kernel.shmall = 4294967296 kernel.panic = 30
[root@centos6 ~]# sysctl kernel.panic kernel.panic = 30