助け合いフォーラム
正解
Upstart
systemd
解説
最近のシステムではinitプログラムとして、Upstartやsystemdが採用されることが多くなっています。
したがって正解は
・Upstart
・systemd
です。
「/etc/inittab」を設定ファイルとして使用する従来のinitプログラムは「SysVinit」と呼ばれるものです。
Upstartやsystemdは、従来のSysVinitと比べてシステム起動時の初期化作業が高速化されています。
Upstartは「/etc/event.d/rc-default」ファイルの「telinit 2」の部分を編集することでデフォルトのランレベルを設定できます。
ただし、UpstartはSysVinitと互換性があるため、「/etc/inittab」ファイルを新規に作成し、先述のSysVinitの場合と同じように記述することでデフォルトのランレベルを設定することもできます。その場合、「/etc/inittab」ファイルのランレベルが優先されます。
systemdでは、「/lib/systemd/system/runlevel[0-6].target」ファイル([0-6]部分はランレベルを指定)のシンボリックリンクを「/etc/systemd/system/default.target」として作成することでデフォルトのランレベルを設定できます。
例)デフォルトのランレベルを3に設定する場合
# ln -s /lib/systemd/system/runlevel3.target /etc/systemd/system/default.target
その他の選択肢については以下のとおりです。
・SysVinit
従来の「/etc/inittab」を設定ファイルとして使用するinitプログラムですので、誤りです。
・acpid
ACPIイベントを監視し、電源管理や構成変更に関するイベントを処理するデーモンですので、誤りです。
・SysStart
存在しないinitプログラムです。
参考

なお、Linuxのディストリビューションによってランレベルの定義は異なります。Debian系の場合はランレベル2~5(マルチユーザモード)を区別しません。
通常、ランレベルには3または5を使用します。
ランレベル2、3および5は全てマルチユーザモード(複数のユーザが使用可能)ですが、ランレベル2と3はテキストベース(CUI)で、ランレベル5はグラフィカルなデスクトップ環境(GUI)でシステムを利用します。
なお、ランレベル2ではNFS(ファイル共有)は使用できません。
システムのメンテナンスなどを行う場合は、管理者(root)のみがログインできるランレベル1(シングルユーザモード)を使用します。
現在のランレベルはrunlevelコマンドで確認できます。
# runlevel
N 5
先頭の文字は以前のランレベル、2つ目の文字は現在のランレベルを表しています。なお、「N」はランレベルの変更がされていないことを意味しています。
また、現在のランレベルはinitまたはtelinitコマンドで変更できます。
書式は以下のとおりです。
init ランレベル
telinit ランレベル
例)ランレベルを5に変更する場合
# init 5
または
# telinit 5
「SysVinit」と呼ばれる従来のinitプログラムを採用しているシステムでは、デフォルトのランレベルは「/etc/inittab」ファイルのinitdefaultの行で設定します。
例)デフォルトのランレベルを5に設定する場合
id:5:initdefault:
SysVinitでは、システムの起動時やランレベルの変更時にinitが「/etc/inittab」を参照し、ランレベルに応じたスクリプトを実行して各種サービスを順に起動/停止していきます。
各ランレベルに応じたスクリプトは「/etc/rc[0-6].d」に入っています。
スクリプトのファイル名(実際はシンボリックリンク)は次の規則で命名します。
例)K01smartd
- 1文字目:S(Start: サービスを起動)、K(Kill: サービスを停止)
- 数字:実行優先順位。若番のものが先に実行される
- サービス名:任意の名前をつける
例)ランレベル3で実行されるスクリプト(「/etc/rc3.d」ディレクトリ)

また、最近のシステムではinitプログラムとして、初期化処理を高速化した「Upstart」や「systemd」を採用している場合があります。その場合は「/etc/inittab」ファイルが存在しません。
Upstartは「/etc/event.d/rc-default」ファイルの「telinit 2」の部分を編集することでデフォルトのランレベルを設定できます。
ただし、UpstartはSysVinitと互換性があるため、「/etc/inittab」ファイルを新規に作成し、先述のSysVinitの場合と同じように記述することでデフォルトのランレベルを設定することもできます。その場合、「/etc/inittab」ファイルのランレベルが優先されます。
なお、「/etc/inittab」ファイルは通常Linuxシステムの起動時に読み込まれます。initまたはtelinitコマンドに「q」か「Q」オプションを指定して実行すると、「/etc/inittab」を再読み込みさせ即座に変更を反映させることができます。
例)システムを再起動せずに「/etc/inittab」を再読み込みさせる場合
# init q
# init Q
または
# telinit q
# telinit Q
systemdでは、「/lib/systemd/system/runlevel[0-6].target」ファイル([0-6]部分はランレベルを指定)のシンボリックリンクを「/etc/systemd/system/default.target」として作成することでデフォルトのランレベルを設定できます。
例)デフォルトのランレベルを3に設定する場合
# ln -s /lib/systemd/system/runlevel3.target /etc/systemd/system/default.target
デフォルトのランレベルに0または6を設定してはいけません。設定すると、起動してもすぐに停止または、再起動を繰り返してしまいます。
Upstartでの「/etc/inittab」の効果
この問題の解説に
「「/etc/inittab」を設定ファイルとして使用しないinitプログラムは「Upstart」と「systemd」です。」
と記載されています。
一方、問題ID:3410の参考情報に、以下の記載があります。
「ただし、UpstartはSysVinitと互換性があるため、「/etc/inittab」ファイルを新規に作成し、先述のSysVinitの場合と同じように記述することでデフォルトのランレベルを設定することもできます。その場合、「/etc/inittab」ファイルのランレベルが優先されます。」
上記の両方とも正しいとすると、Upstartが利用できる「/etc/inittab」の
設定項目はデフォルトのランレベルのみで、他の設定は利用できないという
ことになるかと思ったのですが、この理解で正しいでしょうか。
この問題(3311)の解説は、Upstartが「/etc/inittab」の全部の設定を
利用できるわけではないので、Upstartが「/etc/inittab」を利用しない
としているとの理解です。
ご存じの方がおられたら、教えて下さい。
宜しくお願いします。
あまり詳しくはわかりませんが、/etc/inittab は Upstart でも使用可能だけど非推奨 というスタンスのようです。
以下 RHEL6 のマニュアルですが参考に。
https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/6/html/migration_planning_guide/ch04s02s03
なので、Upstart が inittab の機能のどこまで使えるか使えないか というよりは、基本的には使わないもの。
ということから「/etc/inittab」を設定ファイルとして使用しないinitプログラムは「Upstart」~」と理解していいのではないかと思います。
コメント
既に回答もらっていますが、少し付け加えますね。
Upstartが利用できる「/etc/inittab」の設定項目はデフォルトのランレベルのみで、他の設定は利用できない
そのはずです~
Upstartはイベント駆動型、反対にSysVinitは静的で、両者の構造は根本的に異なっているのですが、
SysVinitからUpstartへ無理なく移行してもらうためにランレベルに関してだけ互換性があります。
(ちなみに、Upstartの基本的な設定ファイルは「/etc/init/」にある、ジョブごとに個別の定義ファイル.confです)
問題と解説の意図についても、
Upstartが「/etc/inittab」の全部の設定を利用できるわけではないので、
Upstartが「/etc/inittab」を利用しないとしている
これで合っていると思います~
コメント
この投稿に対して返信しませんか?
k kz5835
2023/07/18 22:37
ojixii様 ご回答、有難うございます。おかげさまで、理解できました。