【systemctl】コマンドの使い方 〜オプション一覧, 自動起動, Statusの見方, reloadとrestartの違い, runningとexitedの違い, serviceとの違い〜

スポンサーリンク
スポンサーリンク

systemctlとは

CentOS6まではLinux起動時の最初に動く"PIDが1のプロセス"は init でしたが、CentOS7系からはsystemdとなっています。systemctl コマンドは、"systemd"をコントロールするコマンドです。

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

serviceコマンドとの違い

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

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

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

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

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

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

systemctl start postfix    # postfixサービスの開始
systemctl stop dovecot    # dovecotサービスの停止
systemctl restart rsyslog    # rsyslogサービスの再起動
systemctl reload squid   # squidサービスの再読み込み
systemctl status httpd # httpdサービスの起動状態表示

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

再起動で失敗する場合はたいてい、停止は成功して起動が失敗するので、1秒程度以上のサービス停止が発生します。

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

サーバ起動時の自動起動ON OFF

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

systemctl list-unit-files -t service

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

systemctl is-enabled postfix   # postfix が自動起動するか否か

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

systemctl enable postfix

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

systemctl disable postfix

と打ちます。

スポンサーリンク

全サービスの起動状態確認

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

systemctl list-units -t service

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

スポンサーリンク
スポンサーリンク
スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

スポンサーリンク
スポンサーリンク