助け合いフォーラム

LPIC

LPIC Lv1-101(Ver5.0)
問題ID : 3660
問題を開く
従来のinitプログラムを置き換えるsystemdの特徴はどれか。(3つ選択)

正解

扱う処理をUnitという単位で管理する

サービスの並列起動によって高速なシステム起動や停止が行える

cgroupsでプロセスのリソースを管理する

解説

systemdはSysVinitを置き換える新しいinitの仕組みです。

systemdで扱う処理はUnitという単位で管理します。Unitは設定ファイルであり、Unitの設定に従ってsystemd自体が処理を実行します。SysVinitのようにスクリプトを実行するわけではありません。
systemdはUpstartと同様、各サービスを並列起動することができます。そのため、順次起動していくSysVinitに比べて高速なシステム起動や停止が行えます。

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

したがって正解は
・扱う処理をUnitという単位で管理する
・サービスの並列起動によって高速なシステム起動や停止が行える
・cgroupsでプロセスのリソースを管理する
です。

その他の選択肢は以下のとおりです。
・扱う処理をジョブという単位で管理する
Upstartの特徴ですので誤りです。

・スクリプトで処理を実行する
SysVinitの特徴ですので誤りです。

参考

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]項目に記述されていることがわかります。


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

上に戻る

「systemdではcgroupsでプロセスを管理」の意味について

公開日 2023/08/01

この問題の解説に以下の記載があります。
「SysVinitではプロセスをPIDによって管理していましたが、systemdではcgroupsというLinuxカーネルの機能によってプロセスのリソースを管理できます。」
参考URL--Developers.IO「systemd超入門」にも、以下の記載があります。
PIDではなくcgroupによってプロセスを管理する

上記からは、systemdではPIDを使用していないと読める様に思います。---①

一方、RHEL8.8クローン(Rocky Linux8.8)では、psコマンドで
以下が表示されます。

(PIDが表示される)
[root@rocky01 /]# ps
PID TTY TIME CMD
2303 pts/0 00:00:00 bash
5069 pts/0 00:00:00 ps

(PID(-p引数)を利用できる)
[root@rocky01 /]# ps -p 1
PID TTY TIME CMD
1 ? 00:00:01 systemd

上記の実際のコマンド出力からは、PIDが使用されている様に見えます。---②

①と②は矛盾しているので、上記の理解は、どこかが誤っている
と思うのですが、正しい理解のしかたをご存じの方は
いらっしゃいますでしょうか。
もし、おられましたら、教えて下さい。

宜しくお願いします。

2023/08/02 17:28

kz5835様

この問題の解説に以下の記載があります。
「SysVinitではプロセスをPIDによって管理していましたが、systemdではcgroupsというLinuxカーネルの機能によってプロセスのリソースを管理できます。」
参考URL--Developers.IO「systemd超入門」にも、以下の記載があります。
PIDではなくcgroupによってプロセスを管理する

上記からsystemdではPIDを使用しないというのは、いささか飛躍しすぎている解釈な気がします。

実際にはどちらもPID:1でそれぞれinitプロセス(Sysvinit)、systemdプロセス(を実行)するそうです。
【初級者向け】Linuxシステムの起動 ~ SysVinit、Upstart、systemd ~

その後のプロセスの管理がPID単位で管理するのか、cgroupsでグループとして管理するのかということではないでしょうか?

参考にあるsystemd超入門にはこういった記載があります。

SysvinitではサービスをPIDによって管理していましたが、Systemdではcgroupによって管理します。
PIDの場合、プロセスが2回forkすると親プロセスと孫プロセスの直接的な関係性は切れますが、
cgroupの場合複数回のforkが発生しても管理下に置くことが出来ます。

このことから
・Sysvinitでは、親プロセスと孫プロセスの直接的な関係性が切れるためPID単位でしかリソースの管理ができない
・cgroupであれば、同一のグループに属するプロセスのリソースをすべて管理できる
と、上記のように自分は解釈いたしました。

調べていく中で参考になったサイトをいかに羅列しておきます。
SysVinit
cgroups
cgroups(Wikipedia)
systemctl stop serviceは何をしてくれるか

以上となります。
自分も勉強中の身で回答させていただき恐縮ですが、参考になれば幸いです。
また、ほかに不明な点や、不備があれば一緒に勉強させていただければと思いますので、
ご指摘いただければと思います。


コメント

k kz5835

2023/08/03 05:39

EVa0082様 ご回答、貴重な情報のご提供、有難うございます。おかげ様で、理解することができました。宜しくお願いします。

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

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