助け合いフォーラム

LPIC

LPIC Lv1-101(Ver5.0)
問題ID : 3620
問題を開く
systemdの動作するシステムにおいて、サーバとして動作させるのに適切な起動時のターゲットはどれか(2つ選択)

正解

runlevel3.target

multi-user.target

解説

systemdが動作するシステムにおいて、起動時に最初に読み込まれるUnitは「/etc/systemd/system/default.target」です。「default.target」をSysVinitでのランレベルに相当するUnitへのシンボリックリンクとして作成することで、期待するサービス群を起動できるようになります。SysVinitのランレベルとsystemdのターゲットは以下のように対応しています。

これらのターゲットは「/lib/systemd/system」配下に格納されています。また、SysVinitとの関連がわかりやすいように、runlevel0.target〜runlevel6.targetまでのシンボリックリンクも用意されています。

サーバとして動作させる際は、ランレベル3(multi-user.target)を指定します。ランレベル5でも必要なサービスを起動させることは可能ですが、グラフィカルログインやデスクトップを制御するプロセスも起動させるため、サーバとして稼働するには無駄なリソースを使用してしまいます。

よって正解は
・multi-user.target
・runlevel3.target
です。

その他の選択肢については以下のとおりです。
・runlevel1.target
シングルユーザーモード(ランレベル1)に相当するターゲットです。サーバとして動作するのに必要なサービス群も起動しないターゲットのため、誤りです。

・graphical.target
・runlevel5.target
グラフィカルログイン(ランレベル5)に相当するターゲットです。上記の通り無駄なリソースを使用してしまうターゲットのため、誤りです。

・server.target
そのようなターゲットはないため、誤りです。

参考

systemdはSysVinitを置き換える新しいinitの仕組みです。systemdでは以下のデーモンプロセスが連携して動作しています。


systemdで扱う処理はUnitという単位で管理します。Unitは設定ファイルであり、Unitの設定に従ってsystemd自体が処理を実行します。SysVinitのようにスクリプトを実行するわけではありません。
Unitには各機能ごとに拡張子が割り当てられており、拡張子を見ることでどういった機能のためのUnitかが判別できるようになっています。


また、SysVinitではプロセスをPIDによって管理していましたが、systemdではcgroupsというLinuxカーネルの機能によってプロセスのリソースを管理できます。

systemdはUpstartと同様、各サービスを並列起動することができます。そのため、順次起動していくSysVinitに比べて高速なシステム起動や停止が行えます。
システム起動時に最初に読み込まれるUnitは「/etc/systemd/system/default.target」です。「default.target」をSysVinitでのランレベルに相当するUnitへのシンボリックリンクとして作成することで、期待するサービス群を起動できるようになります。

シンボリックリンクとは、Windowsでのショートカットのようなもので、元ファイルの場所を指し示すリンクの事です。シンボリックリンクが持っている情報は「元ファイル(ディレクトリ)がどこにあるのか」というパス情報のみです。
シンボリックリンクを作成するにはlnコマンドに「-s」オプションを付加して作成します。(書式:ln -s 元ファイル リンクファイル)

SysVinitのランレベルとsystemdのターゲットは以下のように対応しています。


これらのターゲットは「/lib/systemd/system」配下に格納されています。また、SysVinitとの関連がわかりやすいように、runlevel0.target〜runlevel6.targetまでのシンボリックリンクも用意されています。

ランレベル3:マルチユーザーモード(テキストログイン)からランレベル5:マルチユーザーモード(グラフィカルログイン)に切り替えるには以下のようにdefault.targetを切り替えます。


各サービスの稼働状況や起動設定を管理するにはsystemctlコマンドを使用します。systemctlコマンドの書式は以下のとおりです。

systemctl サブコマンド [ Unit名 ]
※Unit名に拡張子がない場合、.serviceの拡張子を持つUnitが指定されたものとみなされます

主なサブコマンドの一覧


実行例:Webサービスの自動起動設定と、手動起動

上記実行例を見ると、「/usr/lib/systemd/system/httpd.service」のシンボリックリンクが「/etc/systemd/system/multi-user.target.wants/httpd.service」に作成されているのがわかります。これは、systemdが .target Unitの実行時に、「/etc/systemd/system/[実行ターゲット名].wants」ディレクトリを参照し、格納されているUnitを自動起動するようになっているためです。例えばgraphical.targetを実行する場合、「/etc/systemd/system/graphical.target.wants」ディレクトリを参照します。
上記実行例の場合、multi-user.targetの起動時にhttpd.serviceというWebサービスを制御するUnitが実行されるように、systemctlが自動でシンボリックリンクを「/etc/systemd/system/multi-user.target.wants/」配下に作成しています。

自動起動設定がどのターゲットに対して有効となるかは、各Unit定義ファイルに記述されています。httpd.serviceファイルの中では、以下のとおりmulti-user.targetで有効となるよう[WantedBy]項目に記述されていることがわかります。


サービスの自動起動を無効にすると、作成されたシンボリックリンクが自動で削除されます。

上に戻る

Debian系のサーバのランレベルについて

公開日 2023/07/16

この問題の解説に
「グラフィカルログイン(ランレベル5)に相当するターゲットです。上記の通り無駄なリソースを使用してしまうターゲットのため、誤りです。」
の記載があり、ランレベル5はサーバでは使用すべきでないとされていると思います。
上記のランレベルは、3と5が区別されているので、RedHat系のランレベルの認識です。

一方、別の問題の参考情報などで、Debian系では
「Debian系の場合はランレベル2~5(マルチユーザモード)を区別しません。」
との情報があります。

上記の両方を字義通りに解釈すると、Debian系はランレベル3と5が区別されていないので
サーバ利用には適しておらず、クライアントで利用すべきとなる様に思うのですが
この解釈は、正しいでしょうか。

あるいは、Debian系のlinuxもサーバ用途で使用されることは一般的であり
Debian系のlinuxをサーバで使用する場合には、ランレベルとは別の方法で
グラフィカルインタフェース機能を削除するのが通例であるということでしょうか。

ご存じの方がおられたら、教えて下さい。
宜しくお願いします。

2023/07/18 20:11

質問の回答になっていないかもしれないのですが、調べたことを参考までにご紹介します。
私の結論としては、「Debian系の場合はランレベル2~5(マルチユーザモード)を区別しません。」というのが誤情報なのでは?と思われました。

「Debian系の場合はランレベル2~5(マルチユーザモード)を区別しません。」というのを私は初耳だったのでウェブでざっと検索してみたところ、日本語版Wikipedia やそれを引用するページしか見当たりませんでした。(Wikipedia や個人ブログレベルではない情報ソースがあれば教えてください。)
https://ja.wikipedia.org/wiki/%E3%83%A9%E3%83%B3%E3%83%AC%E3%83%99%E3%83%AB
脚注に、この情報元は
http://www.debian.org/doc/FAQ/ch-customizing.en.html#s-booting
とあります。しかしこのページは現在「ページが見つかりません」となります。過去のアーカイブをさかのぼってみると、2019-10-05時点では
https://web.archive.org/web/20191005004354/https://www.debian.org/doc/manuals/debian-faq/ch-customizing.en.html
の「11.6 And how about Debian and traditional System V init?」が

 Like most System V compatible Unices, Linux has 7 runlevels:
    0 (halt the system),
    1 (single-user mode),
    2 through 5 (various multi-user modes), and
    6 (reboot the system).

となっていました。Wikipedia の著者はここの記述をもとに「Debian系の場合はランレベル2~5(マルチユーザモード)を区別しません。」と解釈したようですが、私にはこの文章はそういう意味ではなく、「ランレベル0, 1, 6の違い・重要度と比べると、ここでランレベル2~5の違いを細かく記述するのは本題ではないので、まとめて書いておきます。」という意味・意図に読み取れました。

なお、上記のページに相当する現在のページは
https://www.debian.org/doc/manuals/debian-faq/customizing.en.html#booting
で、すでにsystemd の記述に更新されていてランレベルの話は削除されています。


コメント

k kz5835

2023/07/18 22:27

tnishita2様 ご回答、有難うございます。 ご質問事項について、回答させて頂きます。 > (Wikipedia や個人ブログレベルではない情報ソースがあれば教えてください。) ping-t(このサイト)の問題ID:3410などの参考情報として ランレベルについての情報が記載されています。 この参考情報に、以下の記述があったため、質問させて頂きました。 「なお、Linuxのディストリビューションによってランレベルの定義は異なります。Debian系の場合はランレベル2~5(マルチユーザモード)を区別しません。」 宜しくお願いします。

t tnishita2

2023/07/19 20:01

m7jgc さんにいただいた回答によると、 「Debian系の場合はランレベル2~5(マルチユーザモード)を区別しません。」 は正しいようですね。私も勉強になりました。

この返信に対して
コメントを記入できます

2023/07/19 13:54

Debian系では、デフォルトの設定ではランレベル2~5は基本的に同じ状態で、GUIは起動しないようになっています。
ランレベル2~5でGUIを有効にするには、別途そのための設定を行う必要があり、その際ランレベルが何かということは直接影響・制限がありません。

systemd環境下の場合、
ランレベル2~5のいずれを指定しても、それらは全てmulti-user.targetに紐づけられているため、
結局multi-user.targetがアクティブになり、違いがありません。(おそらく、もともとどのランレベルを指定したかも引き継がれない)

Debian系でのサーバ運用も一般的なようです~


コメント

k kz5835

2023/07/19 22:25

m7jgc ご回答、有難うございます。おかげさまで、理解できました。

この返信に対して
コメントを記入できます

この投稿に対して返信しませんか?