概要
inittabファイルは、ブートアップ時や通常運転中にどの様なプロセスを 起動するのか(例えば /etc/init.d/boot, /etc/rc, getty等)を指定するファイルである。 init(8) は複数のランレベルを区別する。 それぞれのランレベルに対して固有のプロセス群を起動する事ができる。 ランレベルとして有効なものは、0-6と、 ondemandエントリーとしてのA, B, Cである。 inittabファイル中のエントリーは次の書式で記される :-
id:runlevels:action:process
- id
-
は
inittab
ファイル中でエントリーを識別するための、
1-4文字からなる固有の識別子である
(バージョン5.2.18以前の、又はa.outのライブラリでコンパイルされた
sysvinitでは2文字までに制限されている) 。
註:gettys や他のログインプロセスに対しては、 id欄と対応する tty の添字を同じにすべきである (例えばtty1に対しては1というように)。 でないと、ログインのアカウンティングが正常に動作しない可能性がある。
- runlevels
- は、指定した動作を行なうランレベルの一覧を示す。
- action
- はどのような動作を行うべきかをあらわす。
- process
- には実行されるプロセスを指定する。 プロセス欄の最初の文字が`+'である場合、 init はそのプロセスに対して utmp 及び wtmp アカウンティングを行わない。 これは gettys が自分のutmp/wtmpの面倒を自分でみてしまうために必要となっている。 これは歴史上有名なバグでもある。
runlevelsには異なったランレベルを表わす複数の文字を書いても良い。 例えば、123はランレベル1, 2, 3でそのプロセスを起動することを表わす。 ondemandエントリーのためのrunlevelsは A, B, Cのいずれか一つのみを書くことができる。 sysinit、boot及びbootwaitエントリーの runlevel欄は無視される。
システムのランレベルが変更された場合は、 現在実行中のプロセスのうち新たなランレベルに記されていないものは、 先ずSIGTERMにより、次いでSIGKILLシグナルにより kill される。
action として有効なものは次の通り:
- respawn
- プロセスが終了した場合は常に再起動する(例えば getty) 。
- wait
- 指定したランレベルになった時に一度だけ起動する。 init はこのプロセスが終了するまで待機する。
- once
- 指定したランレベルになった時に一度だけ実行する。
- boot
- システムブート中に実行される。 runlevels欄は無視される。
- bootwait
- システムブート中に実行されるが、 init はそれが終了するまで待機する (例えば/etc/rc)。 runlevels欄は無視される。
- off
- 何もしない。
- ondemand
- ondemandランレベルの印が付いたプロセスは、 指定したondemandランレベルになった時に常に実行される。 しかし、ランレベルは変化しない (ondemandランレベルとは`a', `b', `c'のことである)。
- initdefault
- initdefaultエントリーは、システムブート完了時に入るべき ランレベルを示す。 initdefaultエントリーが存在しない場合は、 init はどのランレベルに入るべきかをコンソールに問い合わせる。 process欄は無視される。
- sysinit
- システムブート中に実行される。 このエントリーはいかなるboot及びbootwaitエントリーよりも 先に実行される。 runlevels欄は無視される。
- powerwait
- 電源に異常が起きた時に実行されるプロセス。 init は普通コンピュータと接続されている UPS と通信しているプロセスから このことを知らされる。 initはこのプロセスが終了するまで待機する。
- powerfail
- powerwaitと同様だが、initはこのプロセスが完了するのを 待たないところが異なる。
- powerokwait
- このプロセスは電源が回復したことをinitが知った時に実行される。
- powerfailnow
- このプロセスは電源に異常が起き、さらに外部 UPS のバッテリー容量が 少なくなったことを(外部 UPS と監視プロセスがこのような状態を 検出できるようになっている場合に)initが知った時に実行される。
- ctrlaltdel
- initがSIGINTシグナルを受け取ったときに実行される。 これは誰かがシステムコンソールでCTRL-ALT-DELという組み合わせで キーを押したことを意味する。 システムをシングルユーザレベルにしたい時やマシンをリブート したい時など、shutdown的なことを行いたい場合に実行される。
- kbrequest
-
initがキーボードハンドラーから、コンソールキーボード上で特定の組み合わせ
のキー入力が行なわれた、とのシグナルを受け取ったときに実行される。
この機能に関する文書はまだ不完全である; kbd-x.xx パッケージ中を探せばより多くの資料が見つかるだろう (この文書を書いている時点で最新のものは kbd-0.94 である)。 基本的には、あるキーの組み合わせを"KeyboardSignal"という動作に結びつけたい という場合に用いられる。 例えば、Alt-上向き矢印というキーの組み合わせをこの用途に使いたい場合は、 キーマップファイル中に次の様に書いておけばよい:
-
alt keycode 103 = KeyboardSignal
-
例
以下は、昔のLinuxで使われていたものに似たinittabの例である:-
# linux用のinittab id:1:initdefault: rc::bootwait:/etc/rc 1:1:respawn:/etc/getty 9600 tty1 2:1:respawn:/etc/getty 9600 tty2 3:1:respawn:/etc/getty 9600 tty3 4:1:respawn:/etc/getty 9600 tty4
次に示すのは、異なったランレベルがある手の込んだ例である (スクリプト中のコメントを参照):
-
# ブート後に入るべきランレベル id:2:initdefault: # 何より先ずシステムの初期化をする。 si::sysinit:/etc/rc.d/bcheckrc # ランレベル0及び6はそれぞれ haltとreboot。 # 1 はメンテナンスモード l0:0:wait:/etc/rc.d/rc.halt l1:1:wait:/etc/rc.d/rc.single l2:2345:wait:/etc/rc.d/rc.multi l6:6:wait:/etc/rc.d/rc.reboot # "三つ指をついてリセット"された時に何をすべきか。 ca::ctrlaltdel:/sbin/shutdown -t5 -rf now # ランレベル2及び3: コンソールでgettyを実行する # (レベル3の場合はモデムポートでも)。 1:23:respawn:/sbin/getty tty1 VC linux 2:23:respawn:/sbin/getty tty2 VC linux 3:23:respawn:/sbin/getty tty3 VC linux 4:23:respawn:/sbin/getty tty4 VC linux S2:3:respawn:/sbin/uugetty ttyS2 M19200