【Linux】systemdとsystemctlコマンド:サービスの自動起動、停止、再起動
2021.11.11 /

本記事ではLinuxディストリビューションにおける、systemdとsystemctlコマンドについて詳しく解説していきます。
UbuntuやCentOSなど多くのLinuxディストリビューションでは、systemdでサービスやデーモンを管理し、systemctlコマンドでsystemdをコントロールします。
このことからsystemdとsystemctlコマンドは共に理解をしておく必要があります。
サービスの自動起動の設定やサービスの再起動など、Linux系のWebサーバーでは必須の知識となります。
ぜひ本記事を通してsystemdとsystemctlコマンドの知識を深めてください。
systemd
systemdとは
systemdはカーネルによって最初に起動されるプログラムです。一番最初に起動するのでプロセスIDは1です。
サービスやデーモンの起動などを管理するプログラムであり、すべてのデーモンを管理するデーモンとも言えます。いわばデーモンの親であり、その他のデーモンは子です。
デーモン(daemon)とはメモリ上に常駐し、処理要求を待ち続けるバックグラウンドで動くプログラム。OS起動時に起動し、実行状態となる。処理要求がきたら自分のコピーを作り処理を行う。デーモンファイルには末尾に「d」を付けることが多い。主にWebサーバーや、FTP、SSHなどはデーモンで動作している。
systemdのような親プログラムはinitプロセスと呼ばれます。
systemdが登場するまではSystemVやinitが利用されていました。systemdは並列でサービスを起動できるため、それらより高速であるという特徴を持ちます。
処理の単位:unit(ユニット)
systemdはunit(ユニット)という単位でサービス(処理)を管理しています。
unitには設定ファイルと呼ばれるファイルで定義されており、接尾辞が「service」や「target」のファイルです。
unit設定ファイルの保存先は2か所あります。
- /usr/lib/systemd/system/
- /etc/systemd/system/
1番は初期の保存先であり、ここのファイルを編集することはありません。
2番には初期設定を上書きする場合や自作の設定ファイルを作成したい場合に、それらファイルを置きます。
1番と2番のディレクトリに同じ名前のUnit設定ファイルがあった場合、2番のファイルが優先されます。
そのため初期設定を上書きしたい場合は、2番のディレクトリにファイルを置きます。
基本的には1番にある設定ファイルを2番のディレクトリにコピーして、コピーしたファイルを修正して利用します。
systemdのログ
systemdによって起動したサービスやデーモンのログは以下ディレクトリにバイナリ形式で保存されます。
/var/log/journal
各サービスのログを確認するにはjournalctlコマンドを使用します。
$ sudo journalctl -f -u サービス名
サービスの起動などで不具合があれば、上記コマンドでエラー内容が表示されます。
systemctlコマンド
systemctlコマンドとは
systemctlコマンドはCentOSやRedhat7系から利用できる、「systemd」をコントロールするコマンドです。
以前まで使用されていたserviceコマンドとは異なります。
systemctlでサービスの起動・停止や自動起動の設定、サービス状態の確認などができます。
serviceコマンドはinitを呼び出しますが、systemctlコマンドはバイナリコマンドです。
initの代替機能であり、高度なシステム管理機能を提供します。
Linuxでのサービスとはアプリケーションを指します。Webサーバーやファイアウォールといった各アプリケーションもすべてサービスです。
つまりアプリケーションの動作をコントロールするコマンドがsystemctlです。
基本的には以下の構文にそってsystemctlコマンドは使います。
systemctl [オプション] 命令 [サービス名]
命令には次のような種類があります。
命令 | 説明 |
---|---|
start | サービスの開始 |
stop | サービスの停止 |
restart | サービスの再起動 |
reload | サービスの再読み込み |
status | サービスの状態表示 |
enable | サービスの自動起動オン |
is-enable | サービスの自動起動確認 |
disable | サービスの自動起動オフ |
daemon-reload | 設定ファイルの再読み込み |
# 使用例
$ systemctl start nginx
$ systemctl stop nginx
$ systemctl restart nginx
systemctlコマンドでは次のオプションが利用できます。
オプション | 説明 |
---|---|
-a または –-all | 全サービス/プロパティを表示 |
-t または –-type= | 特定サービスを指定 |
-l または full | ユニット名・プロセスツリーエントリー・ジャーナル出力を省略しない |
--show-types | ソケット表示でタイプを表示 |
--no-block | 要求された操作が終了するまで同期的に待たない |
現在のサービスの起動状態を確認:list-units
サーバーで現在起動しているサービスの状態を確認する場合は、以下コマンドを実行します。
$ systemctl list-units -t service
表示された一覧から「ACTIVE」欄を確認し、activeであれば起動中、inactiveであれば停止中、failedならば起動失敗していることがわかります。
「SUB」欄にはrunningまたはexitedが表示されます。
サービスにはデーモンとして起動中のものと必要な処理を実行したら終了するものがあります。
runningはクライアントからのアクセスを待ち続けている状態、つまりデーモンを表し、exitedは次に呼び出されるまで待機している状態を表します。
サーバー起動時のサービス自動起動:list-unit-files
サーバー起動時にサービスが自動的に起動するようにしたい場合は、systemctlに命令enableを使用します。
$ systemctl enable サービス名
サービスの自動起動を停止したい場合は、systemctlに命令disableを使います。
$ systemctl disable サービス名
すべてのサービスの自動起動可否を確認するには以下コマンドを実行します。
$ systemctl list-unit-files -t service
上記コマンドを実行すると、左から「UNIT FILE」「STATE」「VENDOR PRESET」の一覧が表示されます。
「STATE」が現在の状態であり、enableが自動起動ON、disableが自動起動OFFです。staticとindirectは他サービスに依存して起動するサービスです。
特定のサービスのみで自動起動かどうか確認したい場合は、以下のコマンドを実行します。
$ systemctl is-enabled サービス名
上記コマンドでenableまたはdisbledが返ってきます。
サービスの状態確認:status
個々のサービスの状態を詳しく確認したい場合は、次のコマンドを実行します。
$ systemctl status サービス名
起動しているか(active)、停止中か(inactive)、起動失敗か(failed)を確認できます。
まとめ
本記事「【Linux】systemdとsystemctlコマンド:サービスの自動起動、停止、再起動」はいかがでしたか。
systemdはカーネルによって最初に起動されるプログラムで、サービスやデーモンの起動などを管理するプログラムです。
systemctlコマンドは「systemd」をコントロールするコマンドで、サービスの起動・停止や自動起動の設定、サービス状態の確認などができます。
本記事でsystemdとsystemctlコマンドの関係が理解できたと思います。
UbuntuやCentOSといったLinuxディストリビューションを利用しているなら、systemdやsystemctlコマンドを理解することでサーバー管理がより楽になると思います。