SHUTDOWN(8)

名前
shutdown - システムを終了させる

書式
/sbin/shutdown [-t sec] [-arkhncfF] time [warning-message]

説明
shutdown はシステムを安全に終了させる。 ログインしている全てのユーザにはシステムが終了する旨が通知され、 新たな login(1) プロセスは生成されなくなる。 shutdown はシステムを直ちに終了させることも、 また指定した時間の経過後に終了させることもできる。 実行中の全てのプロセスには、 まず SIGTERM シグナルが送信され、 システムの終了が通知される。 これによって、 vi(1) のようなプログラムが現在編集中のファイルを保存するための、 またメールやニュースを扱うプログラムが正常に終了するための余裕が与えられる。 shutdown は、init プロセスにシグナルを送り、 ランレベルの変更を依頼することによって、システムを終了させる。 ランレベル 0 はシステムを停止するために、 ランレベル 6 はシステムをリブートするために用いられる。 ランレベル 1 はシステムの管理業務が行なえる状態 (シングルユーザモード) にするために用いられる。 shutdown に -h と -r いずれのオプションも与えられなかった場合は、 デフォルトでランレベル 1 になる。 システムの停止やリブートの際にどのような動作がなされるかは、 /etc/inittab ファイルのエントリのうち、 それぞれのランレベルに対応するものを参照すること。

-a  /etc/shutdown.allow を使う。

-t sec
    他のランレベルに移行する際、 警告シグナルを送ってから kill シグナルを送るまでに sec 秒間待つよう init(8) に伝える。

-k  実際にはシャットダウンを行なわない。 ログイン中のユーザ全員へのメッセージ送付のみを行なう。

-r  シャットダウン後リブートする。

-h  シャットダウン後システムを停止する。

-n  [使うべきでない] init(8) にシャットダウンを依頼するのではなく、 自力でシャットダウンを行う。 このオプションの使用はなるべく避けること。 望んだ結果が得られるとは限らない。

-f  リブート時に fsck を行なわない。

-F  リブート時に必ず fsck を行なう。

-c  現在実行中のシャットダウンをキャンセルする。 当然ながら、このオプションと同時に time を指定することはできない。 しかし、コマンドラインから説明用のメッセージを入力し、 ログイン中の全てのユーザに送る事はできる。

time
    いつシャットダウンするか。

warning-message
    ユーザ全員に送られるメッセージ。

time 引数は様々な書式で指定できる。 まず、hh:mm という書式で時刻を与える方法がある。 ここで hh は時 (数字 1 つか 2 つ)、 mm は分 (数字二つ) である。 二つめは +m という書式で、 m 分待機した後にシャットダウンするよう指示する方法である。 now は +0 のエイリアスである。

遅延指定付きで起動されると、shutdown は /etc/nologin ファイルを作成し、 login(1) のようなプログラムが 新たなユーザログインを許可しないようにする。 shutdown は、init にシグナルを送る前に停止した場合 (キャンセルされたか、なにか問題があった場合)、このファイルを削除する。 init にランレベルを変更するよう伝える前にも、 shutdown はこのファイルを削除する。

-f オプションは `reboot fast' を表す。 このオプションは /fastboot というアドバイス的なファイルを作るだけだが、 このファイルはシステムの再起動時にチェックされる。 ブート rc ファイルは、このファイルが存在すると、 システムが適切な方法でシャットダウンされたので fsck(1) を起動する必要がないと判断する。 その後には、 ブートプロセスは /fastboot ファイルを削除しなければならない。

-F オプションは `force fsck' を表す。 このオプションは /forcefsck というアドバイス的なファイルを作るだけだが、 このファイルはシステムの再起動時にチェックされる。 ブート rc ファイルは、このファイルが存在すると、 fsck(1) を特に `force' オプション付きで起動し、 適切にアンマウントされたファイルシステムもチェックさせる。 その後には、 ブートプロセスは /forcefsck ファイルを削除しなければならない。

-n オプションを用いると、 shutdown は init を呼び出さず、 全てのプロセスを自分自身で kill する。 つづいて shutdown は quota と accounting を停止し、 スワップを停め、全てのファイルシステムを unmount する。

アクセス制御
/etc/inittab 中に適切なエントリを作成しておけば、 特殊なキーシーケンス CTRL-ALT-DEL が押された場合に init(8) が shutdown を起動するようにできる。 こうしておくと、 コンソールのキーボードに接触できる人なら、 誰でもシステムをシャットダウンできてしまう。 これを避けるため、 shutdown には、 起動を許可されたユーザが仮想コンソールのいずれかから ログインしているかどうかチェックする機能がある。 shutdown が -a 引数つきで起動されると (/etc/inittab の shutdown エントリに追加しておく)、 shutdown は /etc/shutdown.allow ファイルが存在するかどうかを調べ、 そこに記されたログイン名を仮想コンソールからログインしている人のリスト (/var/run/utmp から取得する) と比較し、 許可されたユーザのうちの誰かまたは root がログインしている場合のみシャットダウンを続行する。 そうでない場合は

shutdown: no authorized users logged in

というメッセージを物理システムコンソールに出力する。 /etc/shutdown.allow ファイルには、一行にユーザを一人記入する。 空行やコメント行 (行頭に # を付ける) があっても良い。 現在はユーザを 32 人までしか記入しておけないという制限がある。

/etc/shutdown.allow が存在しない場合は、 -a 引数は無視される。

ファイル
/fastboot
/etc/inittab
/etc/init.d/halt
/etc/init.d/reboot
/etc/shutdown.allow

注意
多くのユーザが time 引数を忘れ、 shutdown の出すエラーメッセージに悩んでいる。 time 引数は必ず指定しなければならない。 あらゆるシャットダウンのうちの 90 パーセントまでは、 time 引数は now でいいだろう。

init はコンソールモードでのみ CTRL-ALT-DEL をキャッチし、 シャットダウンを開始する。システムで X Window System が動作していると、 X サーバがすべてのキーストロークを処理する。 X11 の環境によっては CTRL-ALT-DEL をキャッチすることも可能になっているが、 実際にこのイベントによって何が行われるかはその環境に依存する。

シャットダウンは setuid で動作するようには設計されなかった。 /etc/shutdown.allow は誰が shutdown を実行したかを調べるためのものではなく、 誰が現在コンソール (のどれか) にログインしているかをチェックするための ものに過ぎない。

著者
Miquel van Smoorenburg, miquels@cistron.nl

関連項目
fsck(8), init(8), halt(8), poweroff(8), reboot(8)