kazmax - Linux で自宅サーバー

(CentOS7から)Systemdによるシステムとサービスの管理 - 概要と変更点

CentOS 7からは、システムとサービスの管理に「Systemd」というサービスマネージャーが採用されました。

これまでの、chkconfigや、serviceコマンドは、「systemctl」というコマンドに置き換わります。サービスの起動停止だけでなく、OSのシャットダウンや、ターゲットと呼ばれるこれまでのランレベルのようなものの設定、それ以外にもいろいろなタイプのものを操作したり、設定できます。

ここでは、Systemd の概要と、各管理用コマンドの変更点について説明します。

Last Update : 2015年12月09日

(CentOS7から)Systemdによるシステムとサービスの管理 - 概要と変更点 項目

  1. Systemdの概要
  2. ユニットの設定
  3. システム管理用コマンドの変更点

1. Systemdの概要

Systemdとは、全てのプロセスを起動する役目をもつinitプログラムのひとつです。Systemdは、OS起動時に一番最初に起動され、起動されたSystemdが他の全てのサービスを起動させていきます。

CentOS 6ではUpstartというinitプログラムが使用されてきましたが、CentOS 7からは、このSystemdが採用されました。

Systemdが採用されたことにより、OS起動時の処理の仕組みや、これまで使っていた chkconfig コマンド、service コマンド、ランレベルの設定、OSのシャットダウン等のシステム管理の多くの部分の操作、設定方法が変更され、「systemctl」という1つのコマンドで操作、設定することができるようになりました。

2. ユニットの設定

Systemd には、systemd units という概念が導入されており、管理対象のものを「ユニット」として扱います。ユニットの設定はテキストファイルで構成し、以下のディレクトリへ配置します。

ユニット設定ファイルの配置場所
1/usr/lib/systemd/system/インストール済みの RPM パッケージで配布されたユニットの設定ファイル
2/run/systemd/system/プログラムの実行時に作成されたユニットの設定ファイル。1のディレクトリに配置された設定ファイルより優先される。
3/etc/systemd/system/システム管理者が作成、管理するユニットの設定ファイル。2のディレクトリに配置された設定ファイルより優先される。

memo

ユニットの設定ファイルの例

sshd サービスのユニットの設定ファイルの中身。

# cat /usr/lib/systemd/system/sshd.service
[Unit]
Description=OpenSSH server daemon
After=network.target sshd-keygen.service
Wants=sshd-keygen.service

[Service]
EnvironmentFile=/etc/sysconfig/sshd
ExecStart=/usr/sbin/sshd -D $OPTIONS
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=42s

[Install]
WantedBy=multi-user.target

ユニットにはいくつかの種類があります。「種類」の事を、「タイプ(type)」と呼びます。タイプは、ユニット設定ファイルの拡張子で判断することができます。

ユニットの種類(type)
ユニットのタイプ拡張子説明
サービスユニット.serviceユニットを構成するデーモンやプロセスを開始、制御する。詳しくは、 systemd.service(5) を参照。
ソケットユニット.socketシステムのローカル IPC あるいは、ネットワークソケットをカプセル化する。ソケットベースのアクティベーションに使う。ソケットユニットについて詳しくは、 systemd.socket(5) を、ソケットベースおよび、それ以外の形態ののアクティベーションについては、 daemon(7) を参照。
ターゲットユニット.targetユニットをグループ化するためと、ブート中で既知の同期ポイントを作るために使う。 systemd.target(5)を参照。
デバイスユニット.deviceカーネルデバイスをsystemd に見せ、デバイスベースのアクティベーションをするのにも使われる。詳しくは、 systemd.device(5)を参照。
マウントユニット.mountファイルシステムのマウントポイントを制御する。詳しくは、systemd.mount(5)を参照。
オートマウントユニット.automountオートマウント機能を提供する。ファイルシステムのオンデマンドのマウントや、並列化したブートアップに使う。 systemd.automount(5)を参照。
スナップショットユニット.snapshotsystemd ユニットのセットの状態を一時的に退避し、後からその退避されたスナップショットユニットをアクティベートすることで回復することができる。詳しくは、 systemd.snapshot(5)を参照。
タイマーユニット.timerタイマーによって他のユニットのアクティベーションをトリガーすることができる。詳しくは、 systemd.timer(5)を参照。
スワップユニット.swapマウントユニットと似ていて、オペレーティングシステムのメモリーのスワップパーティションあるいはファイルをカプセル化する。systemd.swap(5)を参照。
パスユニット.pathファイルシステムオブジェクトに変化があったり、それが変更された時に、他のサービスをアクティベートする。 systemd.path(5)を参照。
スライスユニット.sliceシステムプロセス(サービスとスコープユニット)を階層ツリー状に管理して、資源管理を行う。 systemd.slice(5)を参照。
スコープユニット.scopeサービスユニットに似ているが、 foreign プロセスを開始せずに管理する。 systemd.scope(5)を参照。

各ユニットの動作等は、ユニットの設定ファイルの中で定義されます。

3. システム管理用コマンドの変更点

旧コマンドとの変更点を以下へまとめます。

システム管理用コマンドの変更点(ブート関連)
動作 ~CentOS 6 CentOS 7~
システムのシャットダウン shutdown shutdown
システムの停止 poweroff systemctl poweroff
システムの電源オフ halt systemctl halt
システムの再起動 reboot systemctl reboot
システム管理用コマンドの変更点(サービス関連)
動作 ~CentOS 6 CentOS 7~
サービス一覧の表示 chkconfig --list systemctl list-unit-files -t service
サービスの登録 chkconfig --add systemctl daemon-reload
サービスの開始、停止 service SERVICE_NAME start
service SERVICE_NAME stop
systemctl start SERVICE_NAME.service
systemctl stop SERVICE_NAME.service
サービスのステータスを表示 service SERVICE_NAME status systemctl status SERVICE_NAME.service
サービスの自動起動の確認 chkconfig --list SERVICE_NAME systemctl is-active SERVICE_NAME.service
サービスの自動起動ON、自動起動OFF chkconfig SERVICE_NAME on
chkconfig SERVICE_NAME off
systemctl enable SERVICE_NAME.service
systemctl disable SERVICE_NAME.service
ランレベル、ターゲットの表示 runlevel systemctl get-default
ランレベル、ターゲットのデフォルト値の設定 /etc/inittab systemctl set-default
現在のランレベル、ターゲットの変更 telinit systemctl isolate
サービスの管理 関連記事
Linux 基礎知識 関連記事