CentOS 7 サービス管理方法について

今までサービスを制御・管理するために使っていた chkconfig は、CentOS 7 からは、レガシー扱いされ、もう使えなくなりました。

コマンドは打てるのですが、結果は以下の通りで、chkconfig を実行すると代わりに systemctl を使ってくださいというメッセージが表示されます。

ということで、CentOS 7 からサービスを管理するためには、systemctl を使わないと行けなくなりました。

CentOS 7 で chkconfig 実行Raw Code(S)Raw Code(T)
# chkconfig --list
注記: この出力は SysV サービスのみであり、ネイティブな systemd のサービスは含まれていません。
      systemd services. SysV 設定のデータはネイティブな systemd の設定によって上書きされます。
      systemd サービスを一覧表示するには 'systemctl list-unit-files' を使用してください。
      特定のターゲットにおいて有効化されているサービスを確認するには、
      'systemctl list-dependencies [target]' 。

netconsole      0:off   1:off   2:off   3:off   4:off   5:off   6:off
network         0:off   1:off   2:on    3:on    4:on    5:on    6:off

chkconfig VS systemctl

旧 chkconfig新 systemctl の基本的な使い方は以下の通りです。

項目 CentOS 6 まで CentOS 7 から
サービス一覧確認 chkconfig –list systemctl list-unit-files
サービス起動 service <SERVICE NAME> start systemctl start <SERVICE NAME>
サービス停止 service <SERVICE NAME> stop systemctl stop <SERVICE NAME>
サービス再起動 service <SERVICE NAME> restart systemctl restart <SERVICE NAME>
設定再読み込み service <SERVICE NAME> reload systemctl reload <SERVICE NAME>
サービス状態を確認 service <SERVICE NAME> status systemctl status <SERVICE NAME>
自動起動 有効化 chkconfig <SERVICE NAME> on systemctl enable <SERVICE NAME>
自動起動 無効化 chkconfig <SERVICE NAME> off systemctl disable <SERVICE NAME>

CentOS 6 までは、chkconfig・service 二つのコマンドを使いましたが、CentOS 7 からは、systemctl コマンドだけで良いです。

簡単にテストしてみる

Step 1. サービス一覧確認

以下の例では、有効になっているサービス一覧を確認します。

enabled 状態のサービス一覧確認Raw Code(S)Raw Code(T)
# systemctl list-unit-files --type service | "grep enabled"
abrt-ccpp.service                           enabled
abrt-oops.service                           enabled
abrt-vmcore.service                         enabled
abrt-xorg.service                           enabled
abrtd.service                               enabled
accounts-daemon.service                     enabled
atd.service                                 enabled
auditd.service                              enabled
bluetooth.service                           enabled
chronyd.service                             enabled
crond.service                               enabled
cups.service                                enabled
dbus-org.bluez.service                      enabled
dbus-org.fedoraproject.FirewallD1.service   enabled
dbus-org.freedesktop.ModemManager1.service  enabled
dbus-org.freedesktop.NetworkManager.service enabled
dbus-org.freedesktop.nm-dispatcher.service  enabled
display-manager.service                     enabled
dmraid-activation.service                   enabled
firewalld.service                           enabled
gdm.service                                 enabled
getty@.service                              enabled
hypervkvpd.service                          enabled
hypervvssd.service                          enabled
irqbalance.service                          enabled
iscsi.service                               enabled
libstoragemgmt.service                      enabled
lvm2-monitor.service                        enabled
mdmonitor.service                           enabled
microcode.service                           enabled
ModemManager.service                        enabled
multipathd.service                          enabled
NetworkManager-dispatcher.service           enabled
NetworkManager.service                      enabled
postfix.service                             enabled
rngd.service                                enabled
rsyslog.service                             enabled
rtkit-daemon.service                        enabled
smartd.service                              enabled
spice-vdagentd.service                      enabled
sshd.service                                enabled
sysstat.service                             enabled
systemd-readahead-collect.service           enabled
systemd-readahead-drop.service              enabled
systemd-readahead-replay.service            enabled
tuned.service                               enabled
vmtoolsd.service                            enabled

動いているサービスに関しては、全て以下のように /etc/systemd/system/multi-user.target.wants/ ディレクトリ内にソフトリンクが作成されます。

  • サービスを有効(enable)にするとソフトインクが作成される
  • サービスを無効(disable)にするとソフトリンクが削除される
/etc/systemd/system/multi-user.target.wants/Raw Code(S)Raw Code(T)
# ls -l /etc/systemd/system/multi-user.target.wants/
合計 0
lrwxrwxrwx. 1 root root 44  9月 14 18:02 ModemManager.service -> /usr/lib/systemd/system/ModemManager.service
lrwxrwxrwx. 1 root root 46  9月 14 17:58 NetworkManager.service -> /usr/lib/systemd/system/NetworkManager.service
lrwxrwxrwx. 1 root root 41  9月 14 17:58 abrt-ccpp.service -> /usr/lib/systemd/system/abrt-ccpp.service
lrwxrwxrwx. 1 root root 41  9月 14 17:57 abrt-oops.service -> /usr/lib/systemd/system/abrt-oops.service
lrwxrwxrwx. 1 root root 43  9月 14 17:58 abrt-vmcore.service -> /usr/lib/systemd/system/abrt-vmcore.service
lrwxrwxrwx. 1 root root 41  9月 14 17:58 abrt-xorg.service -> /usr/lib/systemd/system/abrt-xorg.service
lrwxrwxrwx. 1 root root 37  9月 14 17:57 abrtd.service -> /usr/lib/systemd/system/abrtd.service
lrwxrwxrwx. 1 root root 35  9月 14 18:02 atd.service -> /usr/lib/systemd/system/atd.service
lrwxrwxrwx. 1 root root 38  9月 14 17:58 auditd.service -> /usr/lib/systemd/system/auditd.service
lrwxrwxrwx. 1 root root 39  9月 14 17:58 chronyd.service -> /usr/lib/systemd/system/chronyd.service
lrwxrwxrwx. 1 root root 37  9月 14 17:57 crond.service -> /usr/lib/systemd/system/crond.service
lrwxrwxrwx. 1 root root 33  9月 14 17:59 cups.path -> /usr/lib/systemd/system/cups.path
lrwxrwxrwx. 1 root root 42  9月 14 17:58 hypervkvpd.service -> /usr/lib/systemd/system/hypervkvpd.service
lrwxrwxrwx. 1 root root 42  9月 14 17:58 hypervvssd.service -> /usr/lib/systemd/system/hypervvssd.service
lrwxrwxrwx. 1 root root 42  9月 14 18:02 irqbalance.service -> /usr/lib/systemd/system/irqbalance.service
lrwxrwxrwx. 1 root root 46  9月 14 17:58 libstoragemgmt.service -> /usr/lib/systemd/system/libstoragemgmt.service
lrwxrwxrwx. 1 root root 41  9月 14 17:58 mdmonitor.service -> /usr/lib/systemd/system/mdmonitor.service
lrwxrwxrwx. 1 root root 40  9月 14 17:57 remote-fs.target -> /usr/lib/systemd/system/remote-fs.target
lrwxrwxrwx. 1 root root 36  9月 14 18:02 rngd.service -> /usr/lib/systemd/system/rngd.service
lrwxrwxrwx. 1 root root 39  9月 14 17:58 rsyslog.service -> /usr/lib/systemd/system/rsyslog.service
lrwxrwxrwx. 1 root root 38  9月 14 18:02 smartd.service -> /usr/lib/systemd/system/smartd.service
lrwxrwxrwx. 1 root root 36  9月 14 18:02 sshd.service -> /usr/lib/systemd/system/sshd.service
lrwxrwxrwx. 1 root root 39  9月 14 18:02 sysstat.service -> /usr/lib/systemd/system/sysstat.service
lrwxrwxrwx. 1 root root 37  9月 14 18:02 tuned.service -> /usr/lib/systemd/system/tuned.service
lrwxrwxrwx. 1 root root 40  9月 14 17:58 vmtoolsd.service -> /usr/lib/systemd/system/vmtoolsd.service

Step 2. 特定サービスの状態確認

例えば、postfix のサービス状態を確認したいときには、以下のようにします。

  • line 3 : サービスの自動起動が有効化状態であることが分かる(enabled)
  • line 4 : サービスが稼働中であることが分かる(active・running)
サービス状態確認Raw Code(S)Raw Code(T)
# systemctl status postfix.service
postfix.service - Postfix Mail Transport Agent
   Loaded: loaded (/usr/lib/systemd/system/postfix.service; enabled)
   Active: active (running) since 火 2015-09-15 16:58:17 JST; 16min ago
  Process: 1081 ExecStart=/usr/sbin/postfix start (code=exited, status=0/SUCCESS)
  Process: 1075 ExecStartPre=/usr/libexec/postfix/chroot-update (code=exited, status=0/SUCCESS)
  Process: 1059 ExecStartPre=/usr/libexec/postfix/aliasesdb (code=exited, status=0/SUCCESS)
 Main PID: 1224 (master)
   CGroup: /system.slice/postfix.service
           tq1224 /usr/libexec/postfix/master -w
           tq1227 pickup -l -t unix -u
           mq1228 qmgr -l -t unix -u

 9月 15 16:58:16 localhost.localdomain postfix[1081]: /usr/sbin/postconf: warning: inet_protocols: disabling IPv6 name/ad...tocol
 9月 15 16:58:16 localhost.localdomain postfix[1081]: /usr/sbin/postconf: warning: inet_protocols: disabling IPv6 name/ad...tocol
 9月 15 16:58:16 localhost.localdomain postfix[1081]: postsuper: warning: inet_protocols: disabling IPv6 name/address sup...tocol
 9月 15 16:58:16 localhost.localdomain postfix[1081]: /usr/sbin/postconf: warning: inet_protocols: disabling IPv6 name/ad...tocol
 9月 15 16:58:17 localhost.localdomain postfix/master[1224]: warning: inet_protocols: disabling IPv6 name/address support:...ocol
 9月 15 16:58:17 localhost.localdomain postfix/master[1224]: warning: inet_protocols: disabling IPv6 name/address support:...ocol
 9月 15 16:58:17 localhost.localdomain postfix/master[1224]: daemon started -- version 2.10.1, configuration /etc/postfix
 9月 15 16:58:17 localhost.localdomain systemd[1]: Started Postfix Mail Transport Agent.
 9月 15 16:58:17 localhost.localdomain postfix/pickup[1227]: warning: inet_protocols: disabling IPv6 name/address support:...ocol
 9月 15 16:58:17 localhost.localdomain postfix/qmgr[1228]: warning: inet_protocols: disabling IPv6 name/address support: A...ocol
Hint: Some lines were ellipsized, use -l to show in full.

後、サービス状態が確認できる + 最近のログまで表示してくれるので、ちょっと便利です。

Step 3. サービス停止、及び 無効化

今度は、サービス停止・無効化 サービスを停止し、自動起動を無効にします。

  • line 4 : サービスを停止するとソフトリンクが削除される
  • line 8 : サービスの自動起動が無効化状態であることが分かる(disabled)
  • line 9 : サービスが停止中であることが分かる(inactive・dead)
# systemctl stop postfix.service

# systemctl disable postfix.service
rm '/etc/systemd/system/multi-user.target.wants/postfix.service'

# systemctl status postfix.service
postfix.service - Postfix Mail Transport Agent
   Loaded: loaded (/usr/lib/systemd/system/postfix.service; disabled)
   Active: inactive (dead)

 9月 15 16:58:17 localhost.localdomain postfix/master[1224]: warning: inet_protocols: disabling IPv6 name/address support: Address family not supported by protocol
 9月 15 16:58:17 localhost.localdomain postfix/master[1224]: warning: inet_protocols: disabling IPv6 name/address support: Address family not supported by protocol
 9月 15 16:58:17 localhost.localdomain postfix/master[1224]: daemon started -- version 2.10.1, configuration /etc/postfix
 9月 15 16:58:17 localhost.localdomain systemd[1]: Started Postfix Mail Transport Agent.
 9月 15 16:58:17 localhost.localdomain postfix/pickup[1227]: warning: inet_protocols: disabling IPv6 name/address support: Address family not supported by protocol
 9月 15 16:58:17 localhost.localdomain postfix/qmgr[1228]: warning: inet_protocols: disabling IPv6 name/address support: Address family not supported by protocol
 9月 15 17:15:58 localhost.localdomain systemd[1]: Stopping Postfix Mail Transport Agent...
 9月 15 17:15:58 localhost.localdomain postfix[2148]: warning: inet_protocols: disabling IPv6 name/address support: Address family not supported by protocol
 9月 15 17:15:58 localhost.localdomain postfix[2148]: /usr/sbin/postconf: warning: inet_protocols: disabling IPv6 name/address support: Address family not supported by protocol
 9月 15 17:15:58 localhost.localdomain systemd[1]: Stopped Postfix Mail Transport Agent.

終わりに

サービス名を入力するときに、postfix.service の代わりに、postfix だけでも動作しますが、タイプを明示的に指定した方が、はっきりして分かりやすいので、.service まで付けたほうが良いと思います。

以上、CentOS 7 systemctl の使い方 でした。