助け合いフォーラム

LPIC

LPIC Lv1-101(Ver5.0)
問題ID : 3618
問題を開く
以下のコマンドを実行すると何が起こるか(2つ選択)

# systemctl start poweroff.target

正解

システム終了処理が行われる

telinit 0と同じことが起こる

解説

systemdではランレベルという考え方がありませんが、これまでのSysVinitのランレベルに相当するターゲットUnitを利用することでtelinitと同様の動作をさせることができます。
SysVinitのランレベルとsystemdのターゲットは以下のように対応しています。


poweroff.targetにstartサブコマンドで開始指示をすることで、telinit 0(ランレベル0への移行=システム終了)と同じことが起こります。

よって正解は
・システム終了処理が行われる
・telinit 0と同じことが起こる
です。

その他の選択肢については以下のとおりです。

・poweroffサービスが起動する
サービスを意味するユニットには.serviceの拡張子が付きます。拡張子が.targetであり、サービスではないことがわかるので、誤りです。

・強制電源断処理が行われる
強制電源断ではなく正常なシステム停止処理が走行するので、誤りです。

・telinit 6と同じことが起こる
telinit 6は再起動を意味するランレベルへの移行指示ですので、誤りです。

参考

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環境におけるターゲット変更は、"start"ではなく"isolate"!?

投稿日 2022/11/27

以下の問いの解答として、4, 5 が正答となっており、実際に試したところ確かに解答通りの動作はすることは確認できました。
しかし、targetの変更は、一般的にisolateサブコマンド使って# systemctl isolate poweroff.targetとするのではないでしょうか?サブコマンドstartはサービスなどの起動に使われるので、このような問いが実際にLPICに出題されとは思えないのですが。。。

以下のコマンドを実行すると何が起こるか(2つ選択)

systemctl start poweroff.target

  1. telinit 6と同じことが起こる
  2. 強制電源断処理が行われる
  3. poweroffサービスが起動する
  4. システム終了処理が行われる
  5. telinit 0と同じことが起こる
2022/11/28 21:51

targetの変更はisolateサブコマンドで行うのかもしれませんが、
この問題では「何が起こるか」なので、コマンドを実行したときに起きる事象として誤ってないように思えます。

ちなみに systemctl の man には記述のあるコマンドなので出題されないとも言いきれない気はしますね。
(systemctl(1)からの抜粋です)

poweroff
Shut down and power-off the system. This is mostly equivalent to start poweroff.target --irreversible, ...


コメント

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

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