Go to main content

マニュアルページ セクション 8: システム管理コマンド

印刷ビューの終了

更新: 2018年8月8日
 
 

init(8)

名前

init - プロセス制御の初期化

形式

/usr/sbin/init [0123456abcQqSs]

説明

init はデフォルトの原始ユーザープロセスです。(ブート中にカーネルに渡されるオプションによっては、別の原始ユーザープロセスが呼び出されることもあります。kernel(8) を参照してください)。init は、サービス管理機能の中心のコンポーネントである svc.configd(8) および svc.startd(8) を起動し、これらのコンポーネントに障害が発生した場合はそれらを再起動します。下位互換性を保つため、init/etc/inittab に従って汎用プロセスの起動および再起動も行います (下記参照)。

下記の実行レベルおよびシステムブートの説明は、互換性を保つ目的でのみ記述されており、それ以外の場合はサービス管理機能 smf(7) によって廃止されています。

init の障害

init がシステムのシャットダウン以外の何らかの理由で終了した場合、プロセス ID 1 で再起動されます。

定義されている実行レベル

任意の時点で、システムは 8 つの実行レベルのいずれか 1 つにあります。実行レベルはソフトウェア構成で、そこでは選択されたプロセスグループだけが存在します。各実行レベルに対する、init によって生成されるプロセスは、/etc/inittab で定義されています。init は 8 つの実行レベル、0-6 および S または s (Ss は同じ) のいずれか 1 つを取ることができます。実行レベルは、特権ユーザーが /usr/sbin/init を実行すると変更されます。

init とシステムのブート

システムがブートされると、init が呼び出され、次のイベントが発生します。最初に、svc:/system/environment:init サービスのプロパティーを読み取ります。これらのプロパティーには、LANG や LC_CTYPE などのロケール関連の環境に使用する値があります。次に init は、/etc/inittab を調べ、initdefault エントリを探します(inittab(5) を参照)。initdefault のエントリが、

存在する場合

init は通常、オプションまたはマイルストーンのプロパティーが svc.startd(8) に指定されていない場合のみ、このエントリで指定された実行レベルを開始時の最初の実行レベルとして使用します。

存在しない場合

サービス管理機能 smf(7) は、svc.startd(8) で指定された構成を調べ、オプションまたはマイルストーンのプロパティーで指定されたマイルストーンを入力します。

/etc/inittab 内の initdefault エントリは、次の実行レベルに対応します。

S または s

init はシングルユーザー状態に移行します。この状態では、システムコンソールデバイス (/dev/console) が読み取り/書き込み用に開かれ、コマンド /usr/sbin/su (su(8) を参照) が呼び出されます。init を使用して、システムの実行レベルを変更します。(ファイルの終わり (EOF) を使用して) シェルを終了させたが、/etc/inittab が存在しない場合、init はふたたびシングルユーザー状態に戻すだけです。

0-6

init は対応する実行レベルに移行します。実行レベル 05、および 6 はシステム停止用に予約されています。実行レベル 23、および 4 は、マルチユーザー操作用に使用できます。

電源投入後に、init が最初のシングルユーザー状態以外の実行レベルに移行する場合、init はまず、/etc/inittab を走査して boot および bootwait エントリを探します (inittab(5) を参照)。移行する実行レベルがエントリの実行レベルと一致している場合は、/etc/inittab の他のプロセスが実行される前に、これらのエントリが実行されます。このようにすると、ファイルシステムのマウントなど、オペレーティングシステムの特殊な初期化を先に終えてから、ユーザーにシステムを使用させることができます。次に init は、/etc/inittab を走査し、その実行レベルで処理すべき他のすべてのエントリを実行します。

/etc/inittab の各プロセスを生成するために、init は各エントリを読み込み、再生成が必要なエントリごとに、子プロセスを生成します。/etc/inittab で指定された全プロセスを生成すると、init は、子孫プロセスの消滅、powerfail シグナル、またはシステムの実行レベルを変更する他の init プロセスからのシグナルのいずれかを待機します。これらの状態のいずれか 1 つが発生すると、init/etc/inittab を再検査します。

inittab に関するその他の事項

/etc/inittab にはいつでも新しいエントリを追加できますが、init は前述の 3 つの状態のいずれかが発生するまで待機し続けるので、/etc/inittab を再検証しません。この状況を回避するには、init Q または init q コマンドを使用して、init/etc/inittab をただちに再検査するようにします。

ブート時に init が呼び出されたとき、また、システムがシングルユーザー状態から別の実行状態に移行するたびに、init はコンソールの ioctl(2) 状態をファイル /etc/ioctl.syscon に格納されているモードに設定します。init はシングルユーザー状態が移行するたびに、このファイルに書き込みを行います。

実行レベルの変更

実行レベルの変更が要求されると、init は目標の実行レベルで定義されていないすべてのプロセスに警告シグナル (SIGTERM) を送ります。init は 5 秒間待機したのち、終了シグナル (SIGKILL) を送信することによって、これらのプロセスを強制終了させます。さらに、init は、実行レベルが変更中であることを svc.startd(8) に通知します。すると、svc.startd(8) は、その実行レベル変更に対応するマイルストーンが依存している一連のサービスに、システムを制限します。

init によって生成されたプロセスが終了したことを通知するシグナルを受信すると、init は、プロセスが終了した事実と原因を /var/adm/utmpx/var/adm/wtmpx (存在していれば) に記録します (who(1) を参照)。生成されたプロセスの履歴は /var/adm/wtmpx に記録されます。

initpowerfail シグナル (SIGPWR) を受信した場合、/etc/inittab を走査し、タイプが powerfailpowerwait の特殊なエントリを探します。これらのエントリが呼び出されてから (実行レベルが許可する場合)、その後の処理が実行されます。このように、init はオペレーティングシステムの停止中にさまざまなクリーンアップおよび記録機能を実行します。

環境変数の設定

タイムゾーンや文字の書式設定といった環境変数のデフォルト値を svc:/system/environment:init サービスのプロパティーリストで設定できます。

セキュリティー

initpam(3PAM) を使用してセッションを管理します。/etc/pam.conf 内または /etc/pam.d/ 内のサービスごとのファイルで構成される PAM 構成ポリシーは、init に使用されるセッション管理モジュールを指定します。次に、pam.conf ファイルの抜粋を示します。UNIX セッション管理モジュールを使用するinit のエントリが指定されています。

init   session   required    pam_unix_session.so.1

/etc/pam.d/ を使用する同等の PAM 構成は、/etc/pam.d/init 内の次のエントリです:

session required    pam_unix_session.so.1

/etc/pam.conf 内に init サービスのエントリがなく、/etc/pam.d/init ファイルが存在しない場合は、/etc/pam.conf 内の「その他の」サービスのエントリが使用されます。/etc/pam.conf に「その他の」サービスのエントリが一切存在しない場合、/etc/pam.d/other 内のエントリが使用されます。

オプション

0

ファームウェアモードに移行します。

1

システムをシステム管理者モードにします。すべてのローカルファイルシステムがマウントされます。いくつかの重要なコアプロセスだけが実行を続けます。このモードはオプションのユーティリティーパッケージをインストールする場合など、管理タスクを行うためのものです。すべてのファイルにアクセスできます。ユーザーはシステムにログインできません。

この要求は、smf(7) がシステムのマイルストンを次の値に制限するための要求に対応しています。svc: /milestone/single-user: default。

2

システムをマルチユーザーモードにします。すべてのマルチユーザー環境用の端末プロセスおよびデーモンが生成されます。一般に、この状態を、マルチユーザー状態といいます。

この要求は、smf(7) がシステムのマイルストンを次の値に制限するための要求に対応しています。svc: /milestone/multi-user: default。

3

ネットワークを介してローカルリソースを使用できるようにすることで、マルチユーザーモードを拡張します。

この要求は、smf(7) がシステムのマイルストンを次の値に制限するための要求に対応しています。svc: /milestone/multi-user-server: default。

4

代替のマルチユーザー環境構成として定義できます。システム運用上は必要なく、通常は使用されません。

5

電源を切っても安全なようにマシンを停止します。可能であれば電源を自動的に切断します。

6

オペレーティングシステムを停止したあと、/etc/inittabinitdefault エントリに定義されている状態でリブートします。

サービス svc:/system/boot-config:default はデフォルトで有効になっています。config/fastreboot_default プロパティーが true に設定されている場合に init 6 を指定すると、システムの特定の機能に応じて、特定のファームウェア初期化手順およびテスト手順が省略されます。

abc

/etc/inittab エントリに ab、または c という実行レベルが設定されているときだけ処理します。これらは擬似状態であり、特定のコマンドを実行するように定義できますが、現在の実行レベルが変更されるわけではありません。

Qq

/etc/inittab を再検査します。

Ss

シングルユーザーモードに移行します。適切な形式の /etc/inittab ファイルがなくてもかまわない唯一の実行レベルです。このファイルが存在しない場合、デフォルトで init が入ることができる唯一の正当な実行レベルはシングルユーザーモードだけです。シングルユーザーモードでは、基本システム動作に必要なファイルシステムがマウントされます。システムがシングルユーザーモードに移行すると、これらのファイルシステムは (リモートファイルサーバーが提供している場合でも) マウントされたままになります。他のローカルファイルシステムもマウントされたままになります。シングルユーザーモードへの切り替え時に、init または init.d によって開始された、マルチユーザーモードでしか実行してはならないプロセスはすべて強制終了されます。さらに、utmpx エントリが設定されているプロセスもすべて強制終了されます。この最後の状態では、SAC が起動したすべてのポートモニターが確実に強制終了され、これらのポートモニターによって起動されたサービスも、ttymon login ログインサービスを含めてすべて強制終了されます。

この要求は、smf(7) がシステムのマイルストンを次の値に制限するための要求に対応しています。svc: /milestone/single-user: default。

ファイル

/dev/console

システムコンソールデバイス。

/etc/default/init

このファイルは廃止されたため、将来のリリースで削除される可能性があります。init プロセスではこのファイルから値を取得するのではなく svc:/system/environment:init サービスのプロパティーを読み取ります。以前に /etc/default/init の編集によって行われた変更を反映させるために、システム管理者またはシステム構成権利プロファイルを持つ管理者は init サービスインスタンスの対応するプロパティーを設定し、そのインスタンスをリフレッシュできます。

この読み取り専用ファイルには、環境変数とそのデフォルト値が含まれています。変数は次のとおりです。

TZ

常に localtime に設定されます。システムのタイムゾーンを設定するためには、管理者は SMF サービス timezone:defaulttimezone/localtime プロパティーを設定する必要があります。

CMASK

init が使用し、すべてのプロセスが init プロセスから継承するマスク (umask(1) を参照)。設定されていない場合、init はカーネルから継承したマスクを使用します。CMASK の設定に関係なく、init は必ず、022 で umask の適用を試みてからファイルを作成します。

LC_CTYPE

文字の種類の情報

LC_MESSAGES

翻訳メッセージ

LC_MONETARY

通貨の書式情報

LC_NUMERIC

数値の書式情報

LC_TIME

時間の書式情報

LC_ALL

設定されている場合、他のすべての LC_* 環境変数でこの値が使用されます。

LANG

LC_ALL が設定されてなく、かつ特定の LC_* も設定されていない場合は、これら環境変数に LANG の値が使用されます。

/etc/inittab

init によるプロセスディスパッチ制御。

/etc/ioctl.syscon

シングルユーザー状態に移行したときに init によって保存された、コンソールの ioctl (入出力制御) 状態。

/etc/svc/volatile/init.state

障害から回復するのに必要な init 状態

/var/adm/utmpx

ユーザーアクセスおよび管理情報。

/var/adm/wtmp

ユーザーアクセスと管理情報の履歴

/var/run/initpipe

内部通信用の名前付きパイプ。

属性

属性についての詳細は、マニュアルページの attributes(7) を参照してください。

属性タイプ
属性値
使用条件
system/core-os

関連項目

login(1)sh(1)stty(1)who(1)ioctl(2)kill(2)ctime(3C)pam(3PAM)termio(4I)environ(7)init.d(5)inittab(5)pam.conf(5)utmpx(5)attributes(7)pam_unix_session(7)、smf(7)kernel(8)shutdown(8)su(8)svc.configd(8)svc.startd(8)ttymon(8)

診断

2 分間に 10 回以上、/etc/inittab 内の 1 つのエントリが再起動されていることを検出すると、init はそのエントリのコマンド文字列に誤りがあるとみなして、システムコンソール上にエラーメッセージを表示します。さらに 5 分経過するか、あるいはユーザーが生成した init コマンドからシグナルを受信するまで、init はそのエントリを再起動することを拒否します。このようにすることで、inittab ファイルに入力ミスがあった場合や /etc/inittabで参照されているプログラムが削除された場合でも、init がシステムリソースを使い果たすのを防止できます。

init を実行できるのは、特権ユーザーだけです。

/etc/inittab で、S または s 状態をむやみに使用してはいけません。このファイルを変更するときに注意すべきことは、この状態を initdefault 以外の行に追加しないことです。

/etc/inittabinitdefault エントリでデフォルトの状態が指定されていない場合は、状態 6 になります。その結果、システムはファームウェアへのアクセスとリブートを繰り返すループに陥ります。

システムのブート時に utmpx ファイルを作成できない場合、システムは /etc/inittabinitdefault エントリで指定されている状態に関係なく、“s” の状態でブートします。/var ファイルシステムにアクセスできない場合には、この状況が発生することがあります。

システムが実行レベル 1 またはシングルユーザー (実行レベル S または s) へ移行するときに、/etc/nologin ファイル (nologin(5) を参照) が作成されます。その後実行レベル 2、3、または 4 (マルチユーザー状態) へ移行する時点で、/etc/nologin ファイルは削除されます。

init は内部通信に名前付きパイプ /var/run/initpipe を使用します。

イメージを停止処理すると、依存関係の逆順序でサービスが停止処理されます。