(CentOS7から)Systemdによるシステムとサービスの管理 - 概要と変更点
CentOS 7からは、システムとサービスの管理に「Systemd」というサービスマネージャーが採用されました。
これまでの、chkconfigや、serviceコマンドは、「systemctl」というコマンドに置き換わります。サービスの起動停止だけでなく、OSのシャットダウンや、ターゲットと呼ばれるこれまでのランレベルのようなものの設定、それ以外にもいろいろなタイプのものを操作したり、設定できます。
ここでは、Systemd の概要と、各管理用コマンドの変更点について説明します。
Last Update : 2015年12月09日
(CentOS7から)Systemdによるシステムとサービスの管理 - 概要と変更点 項目
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)」と呼びます。タイプは、ユニット設定ファイルの拡張子で判断することができます。
ユニットのタイプ | 拡張子 | 説明 |
---|---|---|
サービスユニット | .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)を参照。 |
スナップショットユニット | .snapshot | systemd ユニットのセットの状態を一時的に退避し、後からその退避されたスナップショットユニットをアクティベートすることで回復することができる。詳しくは、 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 |