うまいぼうぶろぐ

linuxとhttpdとperlのメモ

sysrqキーでlinuxを再起動させたりcrashさせたり

ref.

(/procy/sysrq-trigger を使えるのはkernel 2.6以降)


:意図的にcrashさせることはないだろうけど。ハングアップしてシェルにも入れないような場合でも、少しでも安全に再起動させたいときとか。(電源ぶち切りは嫌だっていう)

/proc/sysrq-triggerを使わない(使えない)場合は、コンソールからAlt + SysRq(Print Screen) + Command-Key の同時押し。ただし、/proc/sys/kernel/sysrq (sysctl.conf: kernel.sysrq) が1以上で有効になってないと使えない。sysrq-trigger は↑のsysctl.confの値とは無関係に使える。

Command-Key

詳細は /usr/share/doc/linux-doc/sysrq.txt.gz 。以下、使いそうなやつ。

  • 'h'

Will display help (actually any other key than those listed here will display help. but 'h' is easy to remember :-)

ヘルプ表示。ヘルプで表示される単語で大文字になってるのがcommand-keyに該当する。

  • 'b'

Will immediately reboot the system without syncing or unmounting your disks.

ディスクへの同期、unmountを行わずrebootする

  • 'c'

Will perform a system crash by a NULL pointer dereference. A crashdump will be taken if configured.

crashさせて(kernel panic起こす)、設定されていればcrashdumpを取得。

  • 'e'

Send a SIGTERM to all processes, except for init.

init以外の全プロセスにSIGTERM送って終了させる

  • 'i'

Send a SIGKILL to all processes, except for init.

init以外の全プロセスにSIGKILL送って強制終了させる

  • 's'

Will attempt to sync all mounted filesystems.

マウントしている全ファイルシステムを同期(sync)する。

  • 'u'

Will attempt to remount all mounted filesystems read-only.

マウントしている全ファイルシステムを読み取り専用にする。

kernel panicを起こす

実は元々これをやりたくて調べた。kernel panic時に自動で再起動するように、sysctl.confに

kernel.panic = 30 
kernel.panic_on_oops = 1

を書いていて、それが本当に設定されているのかを確認したくて。

# echo c > /procy/sysrq-trigger

これでkernel panic起きる。

ただし、安全に行くならkernel panic起こす前にdiskへの書き込み等をやったほうがいいので。

# echo s > /procy/sysrq-trigger # syncして
# echo u > /procy/sysrq-trigger # filesystemをreadonlyにして
# echo c > /procy/sysrq-trigger # crashさせる