過去数日間、ターゲット(ランレベルと呼ばれる)に関するすべてのドキュメントと例を確認しましたが、このトピックについてはまだ混乱しています。
initの実行レベルとsystemdのターゲットの違いを説明できる人はいますか?起動プロセスに関する限り、ユニットファイルとは何ですか?
答え1
実行レベルとターゲットの基本
背景
sysV(init)では、ランレベルは0〜6の数字です。システムは特定のランレベル(通常は3(ネットワーク+コンソール)または5(Xウィンドウ))にのみ設定できます。 sysVのこのランレベルは、単にinit
基本プロセスが特定の時間にある可能性がある状態です。 systemdの場合、ターゲットは同様の目的で使用されますが、複数のターゲットを同時に適用できます。
systemd で使用されるターゲットは、ランレベルと同様の目的で使用されますが、若干異なる動作をします。各ターゲットは番号なしで名前が付けられ、特定の目的を実行するように設計されており、複数のターゲットを同時にアクティブにすることができます。いくつかの目標は、他の目標からすべてのサービスを継承し、ここに追加のサービスを追加することによって実装されます。一般的なSystemVinitランレベルを模倣するsystemdターゲットがあるので、使い慣れたtelinit RUNLEVELコマンドを使用してターゲットを切り替えることができます。
ターゲット
この機能を念頭に置いて、systemdではネットワークを持つ一般的なシステムですが、multi-user.target
Xはターゲットで実行されません。
$ 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で構築されたシステムが起動したら、ユニットファイルを処理してマウントを構築し、ソケットを設定し、サービスを開始します。これらの順序はユニットファイルによって制御されます。