systemdの紹介

CentOS 7やRHEL 7以前では、System Vがシステムコントローラーとして使われていました。 システムコントローラーは、すべてのプロセスやサービス、起動タスクを管理できます。 System Vはスクリプトでタスクを管理するため、パフォーマンス上の問題があり、 タスクを直列でしか起動できず、システムの起動が遅くなります。

CentOS 7からは、systemdが新しいシステムコントローラーとなりました。 最大の変化は、タスクを並列で起動できるようになり、起動速度が向上したことです。 また、systemdのPIDは1であり、システム内のすべてのプロセスを管理しています!

この記事では、systemdによる「サービス」「起動タスク」「ログ管理」について紹介します。

サービスの状態確認

システム内のすべてのサービスを確認

1
systemctl list-unit-files --type=service

PageUpPageDownで上下に移動し、qで終了します。

実行中のすべてのサービスを確認

1
systemctl  list-units --type=service

サービス名の前に大きな点(●)がある場合、そのサービスに問題があります。

OS起動時に自動起動するサービスを確認

1
systemctl list-unit-files --type=service |  grep enabled

サービスの詳細情報を確認

1
systemctl status <サービス名>

出力には、稼働状況、PID、サービスのパス、最新10件のログが含まれます。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
systemctl status rsyslog
● rsyslog.service - System Logging Service
   Loaded: loaded (/usr/lib/systemd/system/rsyslog.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2017-09-11 08:42:46 JST; 1h 57min ago
     Docs: man:rsyslogd(8)
           http://www.rsyslog.com/doc/
 Main PID: 1417 (rsyslogd)
    Tasks: 3 (limit: 4915)
   CGroup: /system.slice/rsyslog.service
           └─1417 /usr/sbin/rsyslogd -n

Sep 11 08:42:43 diablo systemd[1]: Starting System Logging Service...
Sep 11 08:42:46 diablo rsyslogd[1417]:  [origin software="rsyslogd" swVersion="8.27.0" x-pid="1417" x-info="http://www.rsyslog.com"] start
Sep 11 08:42:46 diablo systemd[1]: Started System Logging Service.
Sep 11 09:36:02 diablo rsyslogd[1417]:  [origin software="rsyslogd" swVersion="8.27.0" x-pid="1417" x-info="http://www.rsyslog.com"] rsyslogd was HUPed

異常終了したサービスを確認

1
systemctl list-units --type=service --state=failed

システムの起動時間を確認

1
2
systemd-analyze
Startup finished in 1.858s (kernel) + 3.654s (initrd) + 29.878s (userspace) = 35.392s

サービスごとの起動時間を確認

1
systemd-analyze blame | grep .service

サービスの管理

サービスの起動

1
systemctl start <サービス名>

サービスの停止

1
systemctl stop <サービス名>

サービスの再起動

1
systemctl restart <サービス名>

サービス設定のリロード

1
systemctl reload <サービス名>

サービスを再起動できないが設定を変更したい場合、reloadが有効です。

OS起動時にサービスを自動起動する設定

1
systemctl enable <サービス名>

OS起動時にサービスを自動起動しない設定

1
systemctl disable <サービス名>

サービスのマスク

サービスをマスクすると、他のサービスやstartrestartコマンドで起動できなくなります。

1
systemctl mask <サービス名>

サービスのアンマスク

既にマスクされたサービスのマスクを解除します。

1
systemctl unmask <サービス名>

サービスユニット全体のリロード

サービスユニットを追加・削除した際に実行します。

1
systemctl daemon-reload

シンプルなサービスユニットファイルの作成

ユニットファイルのパス

ユニットファイルを作成し、/etc/systemd/systemに配置します。

ユニットファイルの例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
[Unit]
Description=<サービスの説明>
After=<どのサービスの後に起動するか任意)>

[Service]
Type=forking
ExecStart=<実行コマンドのパス>
ExecReload=<設定ファイルのリロードコマンド任意)>
KillSignal=SIGTERM
KillMode=mixed

[Install]
WantedBy=multi-user.target

新しいサービスユニットファイルを作成した後はdaemon-reloadを実行してください。

Targetとランレベル

デフォルトのランレベルを確認

1
systemctl get-default

デフォルトのランレベルを設定

1
systemctl set-default <ターゲット名>

ランレベルを変更

1
systemctl isolate <ターゲット名>

ログの管理

最新の起動からのログを確認

1
journalctl -e -f

ユニット(サービス)のログを確認

1
journalctl -e -f -u <ユニット名>

指定した期間のログを確認

1
journalctl --since="yyyy-MM-dd hh:mm:ss" --until="yyyy-MM-dd hh:mm:ss"

ログのディスク使用量を確認

1
journalctl --disk-usage

ログの最大ディスク使用量を変更

/etc/systemd/journald.confSystemMaxUse=..のコメントを外し、値を設定します。

1
SystemMaxUse=50M

その後、journaldサービスを再起動します。

1
systemctl restart systemd-journald.service

参考文献