Help us understand the problem. What is going on with this article?

これからSystemd入門する

More than 1 year has passed since last update.

目的

Systemdについて、改めて調査したのでその備忘録。

Systemdとは

Linuxの起動処理やシステム管理を行う仕組み。
CentOS7より採用。

Linuxの起動処理

  • 電源投入によりBIOSが起動する。
  • BIOSからブートローダーが呼び出される。
  • ブートローダーがLinuxカーネルを起動する。
  • Linuxカーネルがinitプロセス(PID 1)を起動する。
  • Systemdはinitプロセスにあたる。 78692eb8438a92f7e11a516981ad7fad.png

出典

特徴

シェルスクリプトではない

  • これまで使われていた、Sysvinitは全て1つのシェルスクリプト内に処理として書かれていたため細分化できなかった

  • Sysvinitにまとめられていた個々の処理を抜き出しUnitという単位で管理

  • 並列実行や依存関係を持たせたりできるように。

起動が柔軟に行える

  • システム起動時以外の契機をトリガーにできる

定義ファイルの場所

  • /etc/systemd/system

管理者がカスタマイズ、こちらが優先実行

  • /usr/bin/lib/systemd/system

デフォルトの設定、基本的には触らない

Unitの操作

Unitの一覧表示

$ systemctl list-unit-files

Unitの自動起動、無効化

$ systemctl enable/disable <UNIT>

Unitの手動起動、停止

$ systemctl start/stop <UNIT>

Unitファイルの構成

Unitファイルは主に3つのセクションに分類されます。
1. Unitセクション
- Unitの説明や、依存関係を記述する設定項目
2. Service セクション
- 固有の設定項目
3. Installセクション
- systemctl enable/disableコマンドの動作に影響する設定項目

実際のUnitファイルを例に、各セクションの設定方法を確認してみましょう。

nginxのUnitファイルを見てみましょう。

$ cat /usr/lib/systemd/system/nginx.service 

## Unitの説明や依存関係などを記述
[Unit]
Description=The nginx HTTP and reverse proxy server
##このUnitより先に起動するUnit
After=network.target remote-fs.target nss-lookup.target


## 固有の設定オプション
[Service]
## サービスプロセスの起動完了の判定方法(デフォルトはsimple)
Type=forking
## メインプロセスのPIDファイル
PIDFile=/run/nginx.pid
## サービス起動前の追加コマンド
ExecStartPre=/usr/bin/rm -f /run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t
## サービスの起動コマンド
ExecStart=/usr/sbin/nginx
## サービスリロードコマンド
ExecReload=/bin/kill -s HUP $MAINPID
##systemctl stopコマンドでどのシグナルを送るか
KillSignal=SIGQUIT
## 停止完了までに待機する時間
TimeoutStopSec=5
## 停止せず残ったプロセスの扱い
KillMode=process
## サービス専用の/tmp、/var/tmp/を作成するかどうか
PrivateTmp=true

## systemctl enable/disable時の挙動を設定する。
## multi-user.targetを起点にした依存関係が作成され(シンボリックリンクが作られる)、OS起動時に実行されるようになる。
[Install]
WantedBy=multi-user.target

各セクションの設定項目

Unitセクション

主なオプションは下記の通りです。

オプション 説明
Description Unitの説明文
After このUnitより先に起動するUnit
Before このUnitより後に起動するUnit

Serviceセクション

主なオプションは下記の通りです。

オプション 説明
ExecStart サービス起動コマンド
ExexReload サービスリロードコマンド
ExecStop サービス停止コマンド
ExecStartPre/Post サービス起動前後のコマンド
ExecStopPost サービス停止後に実行するコマンド
Type サービスプロセスの起動完了の判定方法、デフォルトはsimple
PIDFIle fork型サービスのメインプロセスのPIDファイル
Restart サービスプロセス停止時の再起動条件
PrivateTmp このサービス専用の/tmpと/var/tmpを用意するかどうか
TimeoutStopSec 停止完了までに待機する時間の設定、指定時間内に終了しなかった場合、矯正終了する
KillMode ExecStopで停止せずに残ったプロセスの処理方法
KillSignal サービスの終了時にどのシグナルを使用するか

Installセクション

主なオプションは下記の通りです。

オプション 説明
WantedBy enable時にこのUnitの.wantsディレクトリにリンクを作成する
Requiredby enable時にこのUnitの.requiredディレクトリにリンクを作成する

Type=forkingについて

「Type」は、「ExecStart」で指定したコマンドでサービスのプロセスを起動した際に、起動完了をどのように判定するかを指定します。たとえば、フォアグラウウンドで実行を継続するコマンドであれば、「Type=simple」とします。これは、コマンドを実行したタイミングで起動完了と判断します。あるいは、子プロセスをフォークしてバックグラウンドにまわして、最初のコマンド自体は終了するタイプであれば、「Type=forking」とします。この場合は、実行したコマンドが終了した時点で起動完了と判断します。

Systemd入門(4) - serviceタイプUnitの設定ファイル - めもめも

参考

下記の記事を大いに参考にした。
わかりやすい。
正直こちらを読めば事足りる。

Linux女子部 systemd徹底入門
http://enakai00.hatenablog.com/entry/20130917/1379374797

bluesDD
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away