【systemctl】の使い方 〜オプション一覧,自動起動,list-units/list-unit-filesの見方, reloadとrestartの違い, runningとexitedの違い〜

systemctl コマンドとは

CentOS6 までは Linux 起動時の最初に動く "PID が 1 のプロセス"は init でしたが、CentOS7 系からは systemd となっています。

systemctl コマンドは、"systemd" をコントロールするコマンドです。

CentOS6 まで使われていた service コマンドと似ていますが、何が違うのでしょうか。

serviceコマンドとの違い

正直、本質的な違いはないです。同じような書式で同じようなことができます。

ただ、service コマンドは、実体は init を呼び出すスクリプトなのに対し、systemctl コマンドはネイティブなバイナリコマンドになっています。

このコマンドの使い方をまとめてみます。

サービスの開始・停止・再起動・再読み込み

service [サービス名] [命令] に代わるものです。

systemctl [命令] [サービス名] と、順番が変わります。

[postfixサービスの開始]

# systemctl start postfix

[dovecotサービスの停止]

# systemctl stop dovecot

[rsyslogサービスの再起動]

# systemctl restart rsyslog

[squidサービスの再読み込み]

# systemctl reload squid

[httpdサービスの起動状態表示]

# systemctl status httpd

restart (サービス再起動) とreload (設定再読み込み) の大きな違いは、失敗したときの挙動が異なる点です。

再起動で失敗する場合はたいてい、停止は成功して起動が失敗するので、正しく起動するまでの間、サービス停止が発生します。

一方、再読み込みで失敗した場合は、停止をしていないので、設定変更前の状態で起動し続けられます。

list-unit-files = サーバ起動時の自動起動ON OFF

サービスが自動起動するか否かを確認するコマンド(chkconfig --listに代わるコマンド)

# systemctl list-unit-files -t service

enable = 自動起動 ON, disable = 自動起動 OFF です。static や indirect は有効/無効にするようなサービスではなく、他のサービスとの依存関係によって起動する類です。indirect は static と異なり、さらに別のunit ファイルを呼び出します。

依存関係については以下を併せてご参照下さい。

関連記事

systemctl list-dependencies コマンドは systemd の Unit の "依存関係" や "順序関係" を表示するコマンドです。この記事ではこのコマンドの使い方を紹介します。 systemctl list-d[…]

もしくはサービス狙い撃ちで自動起動するかどうかの確認 (postfix が自動起動するか否か)

# systemctl is-enabled postfix

もし "disabled" と返ってきて、自動起動したい場合は

# systemctl enable postfix

逆に "enabled" と返ってきて、自動起動させたくない場合は

# systemctl disable postfix

と打ちます。

list-units = 全サービスの起動状態確認

サービスの起動状態を確認するコマンド

# systemctl list-units -t service

ユニット定義が正しく読み込めている場合は LOAD の列に loaded と表示されます。

ACTIVE の列は active なら実行中、inactive であれば起動していない状態、failed なら起動失敗した状態です。

SUB の列は running と exited のどちらかになります。詳細は本記事の最後尾をご参照下さい。

systemctl status コマンドの見方

起動中の場合はActive:の項目が緑色で active (running) と表示されます。

[root@localhost ~]# systemctl status rsyslog
● rsyslog.service - System Logging Service
Loaded: loaded (/usr/lib/systemd/system/rsyslog.service; enabled; vendor preset: enabled)
Active: active (running) since 木 2017-12-07 07:03:21 JST; 8h left
Main PID: 959 (rsyslogd)
CGroup: /system.slice/rsyslog.service
mq959 /usr/sbin/rsyslogd -n

起動しておらず、起動失敗もしていない場合は Active: の項目が inactive (dead) と表示されます。

[root@localhost ~]# systemctl status httpd
● httpd.service - The Apache HTTP Server
Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
Active: inactive (dead)
Docs: man:httpd(8)
man:apachectl(8)
[root@localhost ~]#

起動失敗した場合は Active: の項目が赤字で failed と表示されます。その他問題個所が赤字で表示されます。

[root@localhost ~]# systemctl status postfix
● postfix.service - Postfix Mail Transport Agent
Loaded: loaded (/usr/lib/systemd/system/postfix.service; enabled; vendor preset: disabled)
Active: failed (Result: exit-code) since 水 2017-12-06 22:23:13 JST; 4s ago
Process: 10636 ExecStop=/usr/sbin/postfix stop (code=exited, status=1/FAILURE)
Process: 10681 ExecStart=/usr/sbin/postfix start (code=exited, status=1/FAILURE)
Process: 10678 ExecStartPre=/usr/libexec/postfix/chroot-update (code=exited, status=0/SUCCESS)
Process: 10674 ExecStartPre=/usr/libexec/postfix/aliasesdb (code=exited, status=0/SUCCESS)
Main PID: 10436 (code=killed, signal=TERM)

running と exited の違い

systemctl status コマンドで起動状態を確認した際、起動中のサービスは Active (running) となっている場合もありますが、Active (exited) と表示される場合もあります。この違いは何でしょうか。

簡単に言うと、running は httpd や postfix 等の、常にクライアントからのアクセスを待ち構えているようなサービス状態のことを指します。常に戦闘モードです。

一方 exited は network サービスに代表されるような、サービス起動時にまず処理が走りますがそれを済ませてしまったらのんびり次に呼び出される機会を待つ状態のことを指します。レスポンスは若干遅いですが来たら対応する、という状態です。

IT/インフラエンジニアの地位とスキル向上のために

関連記事

IT 技術の進化はとどまることを知りません。矢継ぎ早に新たな技術が出てきたり、数年前の技術が時代遅れになったりと、IT エンジニアは勉強し続ける運命のようです。 それをどう思うかはあなた次第。 ビジネスの基本は『付加価値を与える[…]

IMG
関連記事

nesuke の考える NW エンジニアの2つの道 ネットワークエンジニアには 2 つの道があります。 1 つはネットワーク構築一筋で、L4 までをひたすらきっちりと構築していく道。 もう 1 つはネットワークを軸として深堀し[…]

IMG