Lesson 12
Linux上でシステム管理をしてみよう
Lesson 12
Chapter 1
はじめに
Lesson 12
Chapter 2
プロセス管理の親であるsystemd
systemd(システムディー)
とはLinux上で一番最初に起動するプロセスであり、あとに続くシステムやサービスを管理するための仕組みです。様々なサービスやデーモンの起動順序を管理しています。
デーモンについて
デーモンとはシステムの機能を提供するために、各システムに常に起動しているバックグラウンドプロセスです。 デーモンは、各システムに対して行われるリクエストなどを検知し、それらを受け取る"門番"のような立ち位置にいます。
例えば、Webサーバーでは、HTTPリクエストを受け取り、Webページを返すために、Webサーバーのデーモンが常に起動しています。また、Eメールサーバーでは、Eメールを受信したり、Eメールを送信するために、Eメールサーバーのデーモンが常に起動しています。
実際にデーモンを管理するには、後述するsystemdのsystemctl
コマンドを使用することで出来ます。
まずは、サービス(Unit)の定義や管理方法などについて学んでいきましょう。
Unit定義ファイル
systemdはUnit(ユニット)という単位でサービスを管理しており、各Unitに定義ファイルが存在します。 また、systemdによって管理されるサービスやタイマーなどの設定情報を記述するためのファイルには、サービス、タイマー、ソケット、デバイスなどのさまざまなタイプがあります。
これらのUnit定義ファイルは保存先が決まっており、以下の場所に保存されています。
1. /usr/lib/systemd/system
2. /etc/systemd/system
1のパスは標準で設定されているUnit定義ファイルが保存されており、2のパスは自作した定義ファイルの保存先となっています。
自作の定義ファイルは既存のUnit定義ファイルの設定を上書きすることも出来るため、1と2に重複した内容の設定があった場合、2の方を優先します。(基本的に1に保存されている標準のUnit定義ファイルは変更しません。)
Unit定義ファイルの書き方
Unit定義ファイルの記述方法はini形式(イニ形式)
で記述されます。ini形式ではセクションという単位で設定をカテゴリ分けしていきますが、セクションには以下の3つがあります。
セクション名 | 説明 |
---|---|
Unit | サービスやデーモンを起動するために必要な情報を記述する。 |
Service | サービスを起動するために必要な情報を記述する。 |
Install | サービスをインストールするために必要な情報を記述する。 |
以下が実際のUnit定義ファイル(INIファイル)の例となります。
[Unit]
Description=uWSGI
After=syslog.target
[Service]
ExecStart=/usr/local/pyenv/versions/3.9.16/bin/uwsgi
Restart=always
Type=notify
[Install]
WantedBy=multi-user.target
基本的には設定項目=設定値
の形で記述していきます。いくつか設定項目の説明をします。
設定項目名 | 説明 |
---|---|
Description | ユニットの説明 |
After | 自身(ユニット)の前に起動するユニット |
ExecStart | 起動時に実行するコマンド(コマンドが記述されたファイルのパスを指定することも出来る) |
Restart | プロセスが停止した時の動作 |
Type | プロセス起動完了判定の条件 |
WantedBy | プロセスの自動起動設定が有効になった際に、wantsディレクトリに自身のリンクを作成 |
このチャプターでは主にサービスの定義について学習してきました。次は実際に存在するサービスの起動管理の方法について学習していきましょう。

Lesson 12
Chapter 3
systemctl(システムコントロール)
systemctl
コマンドはsystemdに含まれるサービス管理コマンドです。サービスの起動や停止、再起動、自動起動の設定などを行うことができます。
以下が基本的なsystemctl
コマンドの例です。
$ systemctl [オプション] [Unit(サービス)名]
オプション一覧
systemctl
コマンドで使用できるオプションには以下のものがあります。
オプション名 | コマンド例 |
---|---|
サービス起動 | systemctl start [Unit名] |
サービス停止 | systemctl stop [Unit名] |
サービス再起動 | systemctl restart [Unit名] |
サービスリロード | systemctl reload [Unit名] |
サービスステータス表示 | systemctl status [Unit名] |
サービス自動起動有効 | systemctl enable [Unit名] |
サービス自動起動無効 | systemctl disable [Unit名] |
サービス自動起動設定確認 | systemctl is-enabled [Unit名] |
サービス一覧 | systemctl list-unit-files --type=service |
設定ファイルの再読み込み | systemctl daemon-reload |
これらのオプションを使用することで、サービスの管理をすることが出来ます。また、ログの表示、システムの再起動やシャットダウン、その他のシステム管理作業にもよく使われます。
それでは、新しいサービスを作った際にsystemctl
コマンドを利用してサービス管理をする流れを学んでいきましょう。
各種サービスの起動管理
まず、Unit定義ファイルの作成・編集をしたら、systemdに読み込ませるために、以下のコマンドを実行します。ここではexample.service
という仮のサービスを例に挙げています。
$ systemctl daemon-reload
上記コマンドの処理が終わったら、サービスを起動をします。
$ systemctl start example.service
また、システム起動時に自動的にサービスを起動させたい場合は以下のコマンドで自動起動設定を有効化できます。
$ systemctl enable example.service
最後に、サービスの停止には以下コマンドを実行します。
$ systemctl stop example.service
また、.service
拡張子は省略することが出来ます。これがsystemctl
を利用した基本的なサービス管理の流れになります。
ここまでお疲れさまでした。 以上がsystemd
を用いたシステム管理と方法になります。実務では主に、自分たちが作ったWebサービスをサーバーに実装する際に必要となる各種システムの設定や起動管理などに使われます。
難しい内容ですが、ここではまず概念だけでもある程度理解できるように頑張ってみましょう。
