CentOS7のsystemd、systemctl、ターゲット、サービスの概要、使用方法

CentOS7のsystemdの概要、systemctlコマンドの使用方法、ターゲット、サービスの概要、確認、使用方法などについてまとめました。

※目次をクリックすると目次の下部にコンテンツが表示されます。

systemdの概要
●概要
 
・systemdはシステム管理デーモン、ライブラリおよびユーティリティの一式であり、管理および設定における中心的プラットフォーム。
 
・Linuxのinitシステムを置き換えることを第一の目標。
 
・systemdはinitデーモンの名前ではなく、systemd initデーモンに加えjournald、logindおよびnetworkdの各デーモンとそれ以外の多くの低レベルコンポーネントを含む、systemdにバンドルされた全てのソフトウェアを指している。

(systemdに含まれるファイルの抜粋)
/etc/rc.d/init.d/README
/usr/sbin/init

/etc/systemd/journald.conf
/usr/lib/systemd/systemd-journald
/usr/share/man/man5/journald.conf.5.gz
/usr/share/man/man8/systemd-journald.8.gz

/etc/systemd/logind.conf
/usr/lib/systemd/systemd-logind
/usr/share/man/man5/logind.conf.5.gz
/usr/share/man/man8/systemd-logind.8.gz

/usr/lib/systemd/system/network.target

・systemdは、ユーザーログイン、システムコンソール、デバイスホットプラグ(udevを参照)、計画された実行ロギング(cronを置き換える)、ホスト名およびロケールを処理することで、Linuxシステムで共通なsystemd以外のサービスの多くを統合する。
 
・systemdはinitデーモンのように、systemd自身を含むバックグランドプロセスである全てのデーモンを管理するデーモン。
・systemdはブート中に開始される最初のデーモンであり、シャットダウン中に終了される最後のデーモン。
・systemdデーモンはユーザー空間のプロセスツリーのルートとなる。
例)
root 1 0 0 10:38 ? 00:00:03 /usr/lib/systemd/systemd –switc
 
・systemdはその起動過程の要素を並行に実行する。それは伝統的な起動過程のシーケンシャルなアプローチよりも高速である。
 
プロセス間通信(IPC)のため、systemdはUNIXドメインソケットとD-Busを実行しているデーモンから使えるようにする。
 
・将来の再呼び出しに備えて、systemd自身の状態をスナップショットに保存することもできる。
 
●ユニットファイル
 
・systemdはデーモンごとの起動シェルスクリプトを置き換えるため、宣言型言語を使う設定ファイル(ユニットファイル)に各デーモン用の初期化命令を記録する。
 
・ユニットファイルの型にはservice、socket、device、mount、automount、swap、target、path、timer(cronライクなジョブスケジューラとして使用できる)、snapshot、sliceおよびscopeなどがある。
 
●コアコンポーネントおよびライブラリ
 
・systemdは統合されたアプローチに従い、起動シェルスクリプト、pm-utils、inetd、acpid、syslog、watchdog、cronおよびatdなどの様々なデーモンやユーティリティの代替も提供する。
 
○コアコンポーネント
 
・systemd
システムおよびサービスマネージャ
・systemctl
systemdのシステムおよびサービスマネージャの状態を監視、制御。
・systemd-analyze
システムブートアップパフォーマンス統計を決定し、システムおよびサービスマネージャからの他の状態と追跡情報を回収することために使うことができる。
 
○localed補助コンポーネント
 
・systemd-consoled
・systemd-journald
イベントロギングを担当するデーモン。そのログファイルは追加専用のバイナリファイル。システム管理者はシステムイベントのログ出力をsystemd-journald、syslog-ngまたはrsyslogのどれで行うかを決めることができる。
・systemd-logind
ConsoleKitを置き換える、統合されたログインマネージャ
・networkd
様々なネットワーク設定。
・systemd-timedated
システム時間、システムタイムゾーン、またはUTCとローカルタイムゾーンシステムクロックとのどちらかの選択といった時間関連設定のコントロールに使えるデーモン。D-Busでアクセスできる。
・udevd
Linuxカーネル用のデバイスマネージャである。/devディレクトリを処理し、さらにデバイスの装着および脱着時におけるファームウェアのロードなどのユーザー空間アクションを全て処理する。
・libudev
udevを利用するための標準ライブラリで、これによりサードパーティアプリケーションがudevリソースを照会できる。

systemdによるシステムサービスの管理の概要
●システムサービスの管理
 
・以前のバージョンのCentOSでは、SysV initもしくはUpstartと配布されており、/etc/rc.d/init.d/にあるinitスクリプトを使用していた。
 
これらのinitスクリプトは通常、bashで書かれており、システム管理者がシステムの状態とシステム内のデーモンを管理できるようになっていた。
 
CentOS7では、これらのinitスクリプトは、サービスユニットに代わっている。
 
・サービスユニットは、ファイル拡張子.serviceで終わり、initスクリプトと同様の目的を果たす。
 
サービスユニットは、/usr/lib/systemd/systemや/etc/systemd/systemディレクトリに保存されている。
 
・システムサービスの表示、開始、停止、再開、有効化、無効化には、systemctlコマンドラインを使用する。
 
・serviceおよびchkconfigはシステム内で利用可能でまだ機能するが、これらは互換性のために含まれており、使用を控えることが推奨されている。

systemctlコマンドでサービスの操作

(1)サービス一覧の表示


 
●systemctl list-unitsコマンド
 
・読み込み済みの最新サービスユニットをすべて一覧表示
 
・各サービスユニットの完全な名前(UNIT)を表示し、その後にユニットが読み込み済みかどうか(LOAD)、高レベル(ACTIVE)および低レベル(SUB)のユニットのアクティベーション状態、および簡単な説明(DESCRIPTION)が続く。
 
①アクティブなユニットのみ表示 systemctl list-units –type service
 
・デフォルトでは、アクティブなユニットのみを表示する。

# systemctl list-units --type service
UNIT                         LOAD   ACTIVE SUB     DESCRIPTION
auditd.service               loaded active running Security Auditing Service
crond.service                loaded active running Command Scheduler
・・・・
kdump.service                loaded failed failed  Crash recovery kernel arming
kmod-static-nodes.service    loaded active exited  Create list of required stati

②状態に関係なくすべての読み込み済みユニットを表示 systemctl list-units –type service –all
 
・状態に関係なくすべての読み込み済みユニットを表示したい場合は、–all または -a のコマンドラインオプションを付けてコマンドを実行する。
 
③有効かどうかをチェック systemctl list-unit-files
 
・すべての利用可能なサービスユニットを一覧表示させて、それらが有効かどうかをチェックできる。

# systemctl list-unit-files --type service
UNIT FILE                                   STATE
auditd.service                              enabled
autovt@.service                             disabled
blk-availability.service                    disabled
brandbot.service                            static

 

(2)サービスステータスを表示


 
●指定したサービスユニットの詳細情報を表示
 
・コマンド形式
systemctl status name.service
 
・表示内容
Loaded
 サービスユニットが読み込まれているかどうか、ユニットファイルへの絶対パス、ユニットが有効かどうかについての説明。
Active
 サービスユニットが実行中かどうかの情報の後に、タイムスタンプが続く。
Main PID
 対応するシステムサービスのPIDの後に、その名前が続く。
Status
 対応するシステムサービスについての追加情報。
Process
 関連プロセスについての追加情報。
CGroup
 関連するControl Groupについての追加情報。

# systemctl status sshd.service
sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled)
   Active: active (running) since 月 2016-01-04 23:40:31 JST; 4min 29s ago
 Main PID: 1093 (sshd)
   CGroup: /system.slice/sshd.service
           mq1093 /usr/sbin/sshd -D

# systemctl status systemd-sysctl.service
systemd-sysctl.service - Apply Kernel Variables
   Loaded: loaded (/usr/lib/systemd/system/systemd-sysctl.service; static)
   Active: active (exited) since 月 2016-01-04 23:40:08 JST; 6min ago
     Docs: man:systemd-sysctl.service(8)
           man:sysctl.d(5)
  Process: 505 ExecStart=/usr/lib/systemd/systemd-sysctl (code=exited, status=0/SUCCESS)
 Main PID: 505 (code=exited, status=0/SUCCESS)

# systemctl status cpupower.service
cpupower.service - Configure CPU power related settings
   Loaded: loaded (/usr/lib/systemd/system/cpupower.service; disabled)
   Active: inactive (dead)

●特定のサービスユニットが実行中かどうかチェック systemctl is-active ~
 

# systemctl is-active systemd-sysctl.service
active
# systemctl is-active cpupower.service
inactive

●特定のサービスユニットが有効かどうかチェック systemctl is-enabled ~
 

# systemctl is-enabled sshd.service
enabled
# systemctl is-enabled systemd-sysctl.service
static
# systemctl is-enabled cpupower.service
disabled

 

(3)サービスを開始、停止、再開


 
1)サービスの開始
 
・形式
systemctl start name.service
 

# systemctl status httpd.service
httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled)
   Active: inactive (dead)
     Docs: man:httpd(8)
           man:apachectl(8)

# systemctl start httpd.service

# systemctl status httpd.service
httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled)
   Active: active (running) since 水 2016-01-06 01:42:16 JST; 16s ago
     Docs: man:httpd(8)
           man:apachectl(8)
 Main PID: 2414 (httpd)
   Status: "Total requests: 0; Current requests/sec: 0; Current traffic:   0 B/sec"
   CGroup: /system.slice/httpd.service
           tq2414 /usr/sbin/httpd -DFOREGROUND
           tq2415 /usr/sbin/httpd -DFOREGROUND
           tq2416 /usr/sbin/httpd -DFOREGROUND
           tq2417 /usr/sbin/httpd -DFOREGROUND
           tq2418 /usr/sbin/httpd -DFOREGROUND
           mq2419 /usr/sbin/httpd -DFOREGROUND

2)サービスの停止
 
・形式
systemctl stop name.service
 

# systemctl stop httpd.service
# systemctl status httpd.service
httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled)
   Active: inactive (dead)
     Docs: man:httpd(8)
           man:apachectl(8)

 1月 06 01:47:05 localhost.localdomain systemd[1]: Stopping The Apache HTTP ..
 1月 06 01:47:06 localhost.localdomain systemd[1]: Stopped The Apache HTTP S..

3)サービスの再開
 
①restart 停止、開始
 
・選択されたサービスユニットが実行中でない場合は起動のみ行う
・形式
systemctl restart name.servic
 
②try-restart 実行中のみ停止、開始
 
・形式
systemctl try-restart name.service
 
③reload 設定の再読み込み
 
・サービスの実行を中断することなく設定の再読み込み
・この機能をサポートしないシステムサービスは、このコマンド自体を無視する
・形式
systemctl reload name.service
 

# systemctl reload httpd.service
# systemctl status httpd.service
httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled)
   Active: active (running) since 水 2016-01-06 01:58:07 JST; 21s ago
     Docs: man:httpd(8)
           man:apachectl(8)
  Process: 2487 ExecStop=/bin/kill -WINCH ${MAINPID} (code=exited, status=0/SUCCESS)
  Process: 2501 ExecReload=/usr/sbin/httpd $OPTIONS -k graceful (code=exited, status=0/SUCCESS)
 Main PID: 2492 (httpd)
   Status: "Total requests: 0; Current requests/sec: 0; Current traffic:   0 B/sec"
   CGroup: /system.slice/httpd.service
           tq2492 /usr/sbin/httpd -DFOREGROUND
           tq2503 /usr/sbin/httpd -DFOREGROUND
           tq2504 /usr/sbin/httpd -DFOREGROUND
           tq2505 /usr/sbin/httpd -DFOREGROUND
           tq2506 /usr/sbin/httpd -DFOREGROUND
           mq2507 /usr/sbin/httpd -DFOREGROUND

 1月 06 01:58:07 localhost.localdomain httpd[2492]: AH00558: httpd: Could no..
 1月 06 01:58:07 localhost.localdomain systemd[1]: Started The Apache HTTP S..
 1月 06 01:58:17 localhost.localdomain systemd[1]: Reloading The Apache HTTP..
 1月 06 01:58:17 localhost.localdomain httpd[2501]: AH00558: httpd: Could no..
 1月 06 01:58:17 localhost.localdomain systemd[1]: Reloaded The Apache HTTP ..

 

(4)サービスの自動起動、マスクの設定


 
1)サービスの自動起動を有効にする
 
・形式
systemctl enable name.service
 
・選択されたサービスユニットの[Install]セクションを読み込み、/etc/systemd/system/ディレクトリーおよびそのサブディレクトリーにある/usr/lib/systemd/system/name.serviceファイルへの適切なシンボリックリンクを作成する。
 
・このコマンドは既存のリンクの上書きはしないので、シンボリックリンクが確実に再度作成されるようにするには、reenableオプションを使用する。

# systemctl status httpd.service
httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled)
   Active: inactive (dead)

# systemctl enable httpd.service
ln -s '/usr/lib/systemd/system/httpd.service' '/etc/systemd/system/multi-user.target.wants/httpd.service'

# systemctl status httpd.service
httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled)
   Active: inactive (dead)

# systemctl reenable httpd.service
rm '/etc/systemd/system/multi-user.target.wants/httpd.service'
ln -s '/usr/lib/systemd/system/httpd.service' '/etc/systemd/system/multi-user.target.wants/httpd.service'

 
2)サービスの自動起動を無効にする
 
・形式
systemctl disable name.service
 
・選択されたサービスユニットの[Install]セクションを読み込み、/etc/systemd/system/ディレクトリーおよびそのサブディレクトリーから/usr/lib/systemd/system/name.serviceファイルへの適切なシンボリックリンクを削除する。

# systemctl disable httpd.service
rm '/etc/systemd/system/multi-user.target.wants/httpd.service'

 
3)サービスをマスク
 
・サービスユニットにマスクをして、手動で開始したり、別のサービスがこれを開始することを防ぐことができる
 
①マスク
 
・形式
systemctl mask name.service
 
・/etc/systemd/system/name.serviceファイルを/dev/nullへのシンボリックリンクに置き換え、実際のユニットファイルがsystemdにアクセスできないようにする。
 
②マスクを解除
 
・形式
systemctl unmask name.service
 

# systemctl mask httpd.service
ln -s '/dev/null' '/etc/systemd/system/httpd.service'

# systemctl status httpd.service
httpd.service
   Loaded: masked (/dev/null)
   Active: inactive (dead)

# systemctl restart httpd.service
Failed to issue method call: Unit httpd.service is masked.

# systemctl unmask httpd.service
rm '/etc/systemd/system/httpd.service'

# systemctl status httpd.service
httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; enabled)
   Active: inactive (dead)

systemdターゲットとランレベルの概要
●systemdターゲットとは?

・以前のバージョンでは、SysV initもしくはUpstartと配布されており、特定モードのOSを表すランレベルを実装していた。CentOS7では、ランレベルの概念はsystemd targetsに代わっている。
 
・Systemd targetsは、ターゲットユニットで表される。ターゲットユニットは、.targetファイル拡張子で終わり、依存関係の連鎖で他のsystemd unitsをグループ化している。
 
・RHEL7では、以前のバージョンにおける標準ランレベルとほぼ似通った多くの定義済みターゲットが同梱されている。
 
互換性目的で、これらのターゲットをSysVランレベルに直接マッピングするエイリアスも提供されている。
 
・ランレベルとターゲットユニットの対応

ランレベル ターゲットユニット
0	  runlevel0.target、poweroff.target
1	  runlevel1.target、rescue.target
3	  runlevel3.target、multi-user.target
5	  runlevel5.target、graphical.target
6	  runlevel6.target、reboot.target

 
・systemdターゲットを表示、変更、もしくは設定するにはsystemctlユーティリティーを使用する。
 
・systemctlコマンドとrunlevel、telinitとの対応
 
現在読み込まれているターゲットユニットを表示。
runlevel
systemctl list-units –type target
 
現在のターゲットを変更。
telinit runlevel
systemctl isolate name.target

デフォルト、現在のターゲットの確認、変更
1)デフォルトターゲット
 
●デフォルトターゲットの表示
 
# systemctl get-default
multi-user.target
 
/etc/systemd/system/default.targetにあるシンボリックリンクを解決し、その結果を表示する。
 
# ls -al /etc/systemd/system/default.target
lrwxrwxrwx. 1 root root 37 12月 7 23:53 /etc/systemd/system/default.target -> /lib/systemd/system/multi-user.target
 
●デフォルトターゲットの変更
 
・形式
systemctl set-default name.target
 
このコマンドは、/etc/systemd/system/default.targetファイルを/usr/lib/systemd/system/name.target(nameは使用するターゲットユニット名)へのシンボリックリンクで置き換える。
 
例)
# systemctl set-default graphical.target
rm ‘/etc/systemd/system/default.target’
ln -s ‘/usr/lib/systemd/system/graphical.target’ ‘/etc/systemd/system/default.target’
 
# systemctl get-default
graphical.target
 
2)現在のターゲット
 
●現在のターゲットの表示
 
①アクティブなユニットのみを表示

# systemctl list-units --type target
UNIT                LOAD   ACTIVE SUB    DESCRIPTION
basic.target        loaded active active Basic System
cryptsetup.target   loaded active active Encrypted Volumes
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.target      loaded active active Network
・・・

各ターゲットユニットの完全な名前(UNIT)、ユニットが読み込み済みかどうか(LOAD)、高レベル(ACTIVE)および低レベル(SUB のユニットのアクティベーション状態、説明 (DESCRIPTION)を表示。
 
②状態に関係なくすべての読み込み済みユニットを表示

# systemctl list-units --type target --all
UNIT                   LOAD   ACTIVE   SUB    DESCRIPTION
basic.target           loaded active   active Basic System
cryptsetup.target      loaded active   active Encrypted Volumes
emergency.target       loaded inactive dead   Emergency Mode
final.target           loaded inactive dead   Final Step
getty.target           loaded active   active Login Prompts
graphical.target       loaded inactive dead   Graphical Interface
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 inactive dead   Network is Online
network.target         loaded active   active Network
・・・・

●現在のターゲットの変更
 
・形式
systemctl isolate name.target
 
このコマンドは、”name”という名前の付いたターゲットユニットとすべての依存ユニットを開始し、即座にその他すべてを停止します。

# systemctl list-units --type target
UNIT                LOAD   ACTIVE SUB    DESCRIPTION
basic.target        loaded active active Basic System
cryptsetup.target   loaded active active Encrypted Volumes
getty.target        loaded active active Login Prompts
graphical.target    loaded active active Graphical Interface
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.target      loaded active active Network
paths.target        loaded active active Paths
remote-fs.target    loaded active active Remote File Systems
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

# systemctl isolate multi-user.target

# systemctl list-units --type target
UNIT                LOAD   ACTIVE SUB    DESCRIPTION
basic.target        loaded active active Basic System
cryptsetup.target   loaded active active Encrypted Volumes
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.target      loaded active active Network
paths.target        loaded active active Paths
remote-fs.target    loaded active active Remote File Systems
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

 
3)レスキューモード
 
●レスキューモードの概要
 
・シングルユーザーモードを提供。
・通常の起動プロセスを完了できない状況におけるシステムの修復を可能にする。
・レスキューモードでは、システムはすべてのローカルファイルシステムのマウントといくつかの重要なシステムサービスの開始を試みるが、ネットワークインターフェイスのアクティブ化や、システムに同時に他のユーザーによるログインを許可したりすることはしない。
・CentOSでは、レスキューモードはシングルユーザーモードと同等であり、rootパスワードを必要とする。
 
●レスキューモードへの変更
 
systemctl rescue
 
・このコマンドはsystemctl isolate rescue.targetと似ているが、現在システムにログインしているすべてのユーザーに通知メッセージも送信する。
 
・systemdがこのメッセージを送信しないようにするには、このコマンドに–no-wallオプションを付けて実行する。

# systemctl rescue

Broadcast message from root@localhost.localdomain on pts/0 (木 2016-01-14 00:25:20 JST):

The system is going down to rescue mode NOW!

4)緊急モード
 
●緊急モードの概要
 
・可能な限り最小限の環境を提供し、レスキューモードに入れないシステムの状態におけるシステムの修復を可能にする。
・システムはrootファイルシステムを読み込み専用でマウントし、他のローカルファイルシステムのマウントは試みない。また、ネットワークインターフェイスのアクティブ化も行わず、限定的な必須サービスのみを起動する。
・rootパスワードを必要とする。
 
●緊急モードへの変更
 
systemctl emergency
 
・このコマンドは systemctl isolate emergency.target と似ているが、現在システムにログインしているすべてのユーザーに通知メッセージも送信する。
 
・systemd がこのメッセージを送信しないようにするには、このコマンドに –no-wall オプションを付けて実行する。

# systemctl emergency

Broadcast message from root@localhost.localdomain on pts/0 (木 2016-01-14 00:29:57 JST):

The system is going down to emergency mode NOW!

 
5)システムのシャットダウン
 
①システムをシャットダウンしてマシンの電源を切る
systemctl poweroff(旧バージョン:poweroff)
 
②マシンの電源を切らずにシステムをシャットダウンして停止
systemctl halt(旧バージョン:halt)
 
・デフォルトでは、このコマンドはどちらもsystemdが現在システムにログインしているすべてのユーザーに通知メッセージを送信する
・systemdがこのメッセージを送信しないようにするには、–no-wall オプションを付けて実行する。
 
5)システムの再起動
 
systemctl reboot(旧バージョン:reboot)
 
・デフォルトでは、このコマンドはどちらもsystemdが現在システムにログインしているすべてのユーザーに通知メッセージを送信する
・systemdがこのメッセージを送信しないようにするには、–no-wall オプションを付けて実行する。
 
6)システムの一時停止
 
systemctl suspend(旧バージョン:pm-suspend)
 
・このコマンドは、システムの状態をRAMに保存し、RAMモジュールを除いてマシンのほとんどのデバイスの電源を切る。マシンの電源を戻すと、システムは再起動せずにRAMからその状態を復元する。システムの状態がハードディスク上ではなくRAMに保存されるので、システムのサスペンドモードからの復元は、休止状態からの復元よりも大幅に速くなる。ただし結果として、システムをサスペンドした状態は、停電に対して脆弱となる。
 
7)システムを休止状態にする
 
systemctl hibernate(旧バージョン:pm-hibernate)
 
・このコマンドは、システムの状態をハードディスクドライブに保存し、マシンの電源を切る。マシンの電源を戻すと、システムは再起動せずに保存されたデータからその状態を復元する。システムの状態がRAMではなくハードディスク上に保存されるので、マシンはRAMモジュールに電力を維持する必要がない。ただしその結果、システムの休止状態からの復元は、サスペンドモードからの復元よりも大幅に遅くなる。
 
○システムを休止状態にしてサスペンド
 
systemctl hybrid-sleep(旧バージョン:pm-suspend-hybrid)

systemdの各ターゲットの概要、依存性
●デフォルトターゲットの確認

# systemctl get-default
graphical.target

 
●graphical.target

# more /usr/lib/systemd/system/graphical.target
[Unit]
Description=Graphical Interface
Documentation=man:systemd.special(7)
Requires=multi-user.target
After=multi-user.target
Conflicts=rescue.target
Wants=display-manager.service
AllowIsolate=yes

[Install]
Alias=default.target

・Requires=multi-user.target
グラフィカルターゲットを起動する前にmulti-user.targetに含まれるものをすべて開始する。
 
・Wants=display-manager.service
開始したら、”Wants”エントリーに従ってdisplay-manager.serviceサービスを開始。
これにより、GNOMEディスプレイマネージャーが実行される。
 
●multi-user.target

# more /usr/lib/systemd/system/multi-user.target
[Unit]
Description=Multi-User System
Documentation=man:systemd.special(7)
Requires=basic.target
Conflicts=rescue.service rescue.target
After=basic.target rescue.service rescue.target
AllowIsolate=yes

[Install]
Alias=default.target

・Requires=basic.target
マルチユーザーサービスを開始する前に、basic.targetターゲットに含まれるものをすべて開始する。
 
・wantsディレクトリ(/etc/systemd/system/multi-user.target.wants、/usr/lib/systemd/system/multi-user.target.wants)内のすべてのユニットを開始
 
ディレクトリには、マルチユーザーモードとして開始すると考えられる大部分のサービス (printing、cron、auditing、SSH など) へのリンクがある。
 
・サービスを有効にすると、/etc/systemd/system/multi-user.target.wantsディレクトリにシンボリックリンクが保存される。
 
●basic.target

# more /usr/lib/systemd/system/basic.target
[Unit]
Description=Basic System
Documentation=man:systemd.special(7)
Requires=sysinit.target
Wants=sockets.target timers.target paths.target slices.target
After=sysinit.target sockets.target timers.target paths.target slices.target
RefuseManualStart=yes

・Requires=sysinit.target
このターゲットを開始する前にsysinit.targetターゲットに含まれるものをすべて開始する。
 
・wantsディレクトリ内のすべてのユニットを開始
 
ディレクトリには、firewalld、microcode、SELinux、カーネルメッセージ、ロードするモジュールのサービスなどがある。
 
●sysinit.target

# more /usr/lib/systemd/system/sysinit.target
[Unit]
Description=System Initialization
Documentation=man:systemd.special(7)
Conflicts=emergency.service emergency.target
Wants=local-fs.target swap.target
After=local-fs.target swap.target emergency.service emergency.target
RefuseManualStart=yes

・Wants=local-fs.target swap.target
ファイルシステムのマウントとスワップデバイスを有効にする。
 
・wantsディレクトリ内のすべてのユニットを開始
 
ディレクトリには、iSCSI、マルチパス、LVM 監視、および RAID サービスの開始が含まれる。
 
マウントを開始し、ロギングし、カーネルオプションの設定し、udevdデーモンを起動するハードウェアの検出、ファイルシステムの暗号解読の許可などを有効にする。
 
●local-fs.target

# more /usr/lib/systemd/system/local-fs.target
[Unit]
Description=Local File Systems
Documentation=man:systemd.special(7)
After=local-fs-pre.target
DefaultDependencies=no
Conflicts=shutdown.target
OnFailure=emergency.target
OnFailureIsolate=no

・After=local-fs-pre.target
local-fs-pre.target ターゲットの後に実行するように設定
 
・wantsディレクトリ内のすべてのユニットを開始
 
initramfsからネットワーク設定をインポートし、必要に応じてrootファイルシステムで ファイルシステムチェック (fsck) を実行し、/etc/fstabファイルのコンテンツに基づいてrootファイルシステム (および特殊なカーネルファイルシステム) を再マウントしている。

systemdのサービスファイルの概要
SysVのinitスクリプトは、systemdではサービスファイルに相当する。以下、httpdのサービスファイル例にサービスファイルの概要を示す。
 
●サービスファイルの保存場所
 
httpdのサービスファイルのパス
/usr/lib/systemd/system/httpd.service
 
/etc/systemd/system/ディレクトリでも良いようです。
 
●サービスファイルの定義例

# more /usr/lib/systemd/system/httpd.service
[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target
Documentation=man:httpd(8)
Documentation=man:apachectl(8)

[Service]
Type=notify
EnvironmentFile=/etc/sysconfig/httpd
ExecStart=/usr/sbin/httpd $OPTIONS -DFOREGROUND
ExecReload=/usr/sbin/httpd $OPTIONS -k graceful
ExecStop=/bin/kill -WINCH ${MAINPID}
KillSignal=SIGCONT
PrivateTmp=true

[Install]
WantedBy=multi-user.target

・[Unit]セクション
サービスの一般的な情報を記述。
 
・After=・・
依存するターゲットを指定。
 
・[Service]セクション
サービス自身の設定を記述
 
・[Install]セクション
サービスの開始方法を記述
 
・WantedBy=multi-user.target
multi-user.target(SysVのでいうランレベル3)が有効になった場合にスタート
 
●サービスの起動、停止、有効
 
開始
systemctl start httpd.service
 
ステータス確認
systemctl status httpd.service
 
停止
systemctl stop httpd.service
 
自動起動を有効にする
systemctl enable httpd.service

各サービスとターゲットの関係
1)各サービスでどのターゲットを使用するか?
 
サービスファイルの[Install]セクション、”WantedBy”で指定

# more /usr/lib/systemd/system/httpd.service
[Install]
WantedBy=multi-user.target

 
2)サービスの自動起動を有効にする
 
・形式
systemctl enable name.service
 
・選択されたサービスユニットの[Install]セクションを読み込み、/etc/systemd/system/ディレクトリーおよびそのサブディレクトリーにある/usr/lib/systemd/system/name.serviceファイルへの適切なシンボリックリンクを作成する。

# systemctl enable httpd.service
ln -s '/usr/lib/systemd/system/httpd.service' '/etc/systemd/system/multi-user.target.wants/httpd.service'

 
3)ターゲットのサービス一覧を表示

# systemctl list-dependencies multi-user.target
multi-user.target
├─auditd.service
├─brandbot.path
├─crond.service
├─dbus.service
├─httpd.service
・・・

 
4)各サービスの依存関係のリストを表示

# systemctl list-dependencies nfs-server.service
nfs-server.service
├─nfs-idmap.service
├─nfs-mountd.service
├─nfs-rquotad.service
├─proc-fs-nfsd.mount
├─rpcbind.service
├─system.slice
├─var-lib-nfs-rpc_pipefs.mount
└─basic.target
  ├─alsa-restore.service
  ├─alsa-state.servic
・・・

systectlコマンドでプロセスをkill
サービスが正常に動作している場合は、”systemctl stop ~”でサービスを停止することができますが、サービスがハングアップした場合等にサービスに属するすべてのプロセスを停止する場合は、”systemctl kill ~”を使用します。
 
“SIGTERM”シグナルがサービスに属するすべてのプロセスに送られます。
例)
# systemctl kill httpd.service
 
“SIGKILL”を使用したい場合は、以下のようにします。
 
# systemctl kill -s SIGKILL httpd.service

関連記事の目次

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です