ブートシステムのターゲットとユニットファイル

ブートシステムのターゲットとユニットファイル

過去数日間、ターゲット(ランレベルと呼ばれる)に関するすべてのドキュメントと例を確認しましたが、このトピックについてはまだ混乱しています。

initの実行レベルとsystemdのターゲットの違いを説明できる人はいますか?起動プロセスに関する限り、ユニットファイルとは何ですか?

答え1

実行レベルとターゲットの基本

背景

sysV(init)では、ランレベルは0〜6の数字です。システムは特定のランレベル(通常は3(ネットワーク+コンソール)または5(Xウィンドウ))にのみ設定できます。 sysVのこのランレベルは、単にinit基本プロセスが特定の時間にある可能性がある状態です。 systemdの場合、ターゲットは同様の目的で使用されますが、複数のターゲットを同時に適用できます。

https://wiki.archlinux.org/index.php/systemd#Targets

systemd で使用されるターゲットは、ランレベルと同様の目的で使用されますが、若干異なる動作をします。各ターゲットは番号なしで名前が付けられ、特定の目的を実行するように設計されており、複数のターゲットを同時にアクティブにすることができます。いくつかの目標は、他の目標からすべてのサービスを継承し、ここに追加のサービスを追加することによって実装されます。一般的なSystemVinitランレベルを模倣するsystemdターゲットがあるので、使い慣れたtelinit RUNLEVELコマンドを使用してターゲットを切り替えることができます。

SS1

ターゲット

この機能を念頭に置いて、systemdではネットワークを持つ一般的なシステムですが、multi-user.targetXはターゲットで実行されません。

$ systemctl get-default
multi-user.target

ただし、目標は複数の目標をカプセル化(グループ化)したことです。これは、sysVと比較してsystemdの主な利点の1つです。これはオブジェクトファイルを見るとわかります。

systemd.target のマニュアルページ

名前が ".target"で終わるデバイス構成ファイルは、システムターゲットデバイスに関する情報をエンコードし、起動時にデバイスとよく知られている同期ポイントをグループ化するために使用されます。 ....

....これは、依存関係(実行ターゲットとして使用可能)ごとにデバイスをグループ化し、デバイス間の依存関係に使用される同期点の標準化された名前を設定するためにのみ存在します。さらに、ターゲットデバイスは、既存のSysV initシステムのSysVランレベルをより柔軟に置き換えます。 (互換性のためにsystemdのSysVランレベル互換性コードで使用されるrunlevel3.targetなどの特別なターゲットユニットがあります。詳細については、systemd.special(7)を参照してください。)

たとえば、

$ grep target /usr/lib/systemd/system/anaconda.target
Requires=basic.target
After=basic.target

メモ:ここでanaconda.target要件がbasic.target実行され、後で実行する必要がありますbasic.target

CentOS 7.xシステムでどのターゲットがロードされているかを確認できます。

$ systemctl list-units --type=target
UNIT                  LOAD   ACTIVE SUB    DESCRIPTION
basic.target          loaded active active Basic System
cryptsetup.target     loaded active active Local Encrypted Volumes
getty-pre.target      loaded active active Login Prompts (Pre)
getty.target          loaded active active Login Prompts
local-fs-pre.target   loaded active active Local File Systems (Pre)
local-fs.target       loaded active active Local File Systems
multi-user.target     loaded active active Multi-User System
network-online.target loaded active active Network is Online
network.target        loaded active active Network
nfs-client.target     loaded active active NFS client services
paths.target          loaded active active Paths
remote-fs-pre.target  loaded active active Remote File Systems (Pre)
remote-fs.target      loaded active active Remote File Systems
rpc_pipefs.target     loaded active active rpc_pipefs.target
slices.target         loaded active active Slices
sockets.target        loaded active active Sockets
swap.target           loaded active active Swap
sysinit.target        loaded active active System Initialization
timers.target         loaded active active Timers

LOAD   = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB    = The low-level unit activation state, values depend on unit type.

19 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.

systemdの単位は何ですか?

systemdの単位ファイルは、5つのうちの1つを定義する設定ファイルです。たとえば、単位は次のようになります。

  • サービス(.service)
  • マウントポイント(.mount)
  • デバイス(.device)
  • ソケット(.socket)
  • ターゲット(.target)

CentOS 7.xでは、このディレクトリに次の単位ファイルを表示できます。

$ for i in target socket service device mount;do ls -l /usr/lib/systemd/system | grep $i | head -3;done
-rw-r--r--  1 root root  415 May  3 16:05 anaconda.target
-rw-r--r--  1 root root  517 Apr 11 03:36 basic.target
drwxr-xr-x. 2 root root 4096 Jul 28 14:56 basic.target.wants
-rw-r--r--  1 root root  874 Apr 10 23:42 avahi-daemon.socket
-r--r--r--  1 root root  131 Apr 11 01:03 cups.socket
-rw-r--r--  1 root root  102 Apr 11 03:23 dbus.socket
-rw-r--r--  1 root root  275 Apr 27 10:53 abrt-ccpp.service
-rw-r--r--  1 root root  380 Apr 27 10:53 abrtd.service
-rw-r--r--  1 root root  361 Apr 27 10:53 abrt-oops.service
-rw-r--r--  1 root root  169 Apr 12 15:28 [email protected]
-rw-r--r--  1 root root  670 Apr 11 03:36 dev-hugepages.mount
-rw-r--r--  1 root root  590 Apr 11 03:36 dev-mqueue.mount 

電源オン

systemdで構築されたシステムが起動したら、ユニットファイルを処理してマウントを構築し、ソケットを設定し、サービスを開始します。これらの順序はユニットファイルによって制御されます。

引用する

関連情報