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,
[email protected]
fsck(8),
init(8),
halt(8),
poweroff(8),
reboot(8)