systemdの紹介#
CentOS 7やRHEL 7以前では、System Vがシステムコントローラーとして使われていました。
システムコントローラーは、すべてのプロセスやサービス、起動タスクを管理できます。
System Vはスクリプトでタスクを管理するため、パフォーマンス上の問題があり、
タスクを直列でしか起動できず、システムの起動が遅くなります。
CentOS 7からは、systemdが新しいシステムコントローラーとなりました。
最大の変化は、タスクを並列で起動できるようになり、起動速度が向上したことです。
また、systemdのPIDは1であり、システム内のすべてのプロセスを管理しています!
この記事では、systemdによる「サービス」「起動タスク」「ログ管理」について紹介します。
サービスの状態確認#
システム内のすべてのサービスを確認#
1
| systemctl list-unit-files --type=service
|
PageUp
やPageDown
で上下に移動し、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 restart <サービス名>
|
サービス設定のリロード#
1
| systemctl reload <サービス名>
|
サービスを再起動できないが設定を変更したい場合、reloadが有効です。
OS起動時にサービスを自動起動する設定#
1
| systemctl enable <サービス名>
|
OS起動時にサービスを自動起動しない設定#
1
| systemctl disable <サービス名>
|
サービスのマスク#
サービスをマスクすると、他のサービスやstart
やrestart
コマンドで起動できなくなります。
サービスのアンマスク#
既にマスクされたサービスのマスクを解除します。
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 set-default <ターゲット名>
|
ランレベルを変更#
1
| systemctl isolate <ターゲット名>
|
ログの管理#
最新の起動からのログを確認#
ユニット(サービス)のログを確認#
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.conf
のSystemMaxUse=..
のコメントを外し、値を設定します。
その後、journaldサービスを再起動します。
1
| systemctl restart systemd-journald.service
|
参考文献#