UnixPower on Networking
  http://www.unix-power.net/

 
 Top - Linux - CentOS7 ユニットの制御




CentOS6まではデーモンの起動や停止などを行う際には昔ながらの/etc/rc.d/init.d/**** restartなどで行っていました。CentOS7ではこの部分が大幅に変更されています。

CentOS7ではデーモンの制御対象のことを「ユニット」と呼びます。ユニットには以下のような種類がありますが、主に使われるものはserviceです。

ユニットの種類 説明 
.service 指定のバイナリを実行する
.socket systemdがSocketをListenして、接続があるとプロセスに受け渡す(xinetdの代替的な機能)
.target  複数のユニットをまとめるために使用する
.device  udevから通知されたデバイスを表す
.snapshot  ある時点のユニットの状態
.path  指定のファイルが生成されると指定されたサービスを起動する
.mount 指定のファイルシステムをマウントする
.automount  オートマウント処理を実施する ( automountdの代替的な機能 )

そしてこのユニットはsystemctlコマンドで制御を行います。単純にsystemctlコマンドを実行することでアクティブなユニット一覧を取得することができます。

# systemctl
UNIT                             LOAD   ACTIVE SUB       DESCRIPTION
proc-sys-f...nfmt_misc.automount loaded active waiting   Arbitrary Executable File Formats
sys-device...0.0-net-eno2.device loaded active plugged   NetXtreme II BCM5708 Gigabit Ethe
sys-device...ock-sda-sda1.device loaded active plugged   PERC_5_i
sys-device...ock-sda-sda2.device loaded active plugged   PERC_5_i
sys-device...ock-sda-sda3.device loaded active plugged   PERC_5_i
sys-device...:0-block-sda.device loaded active plugged   PERC_5_i
sys-device...0.0-net-eno1.device loaded active plugged   NetXtreme II BCM5708 Gigabit Ethe
sys-device...:0-block-sr0.device loaded active plugged   HL-DT-STCD-RW_DVD-ROM_GCC-4244N
sys-device....0-block-fd0.device loaded active plugged   /sys/devices/platform/floppy.0/bl
sys-device...50-tty-ttyS2.device loaded active plugged   /sys/devices/platform/serial8250/
sys-device...50-tty-ttyS3.device loaded active plugged   /sys/devices/platform/serial8250/
sys-device...05-tty-ttyS0.device loaded active plugged   /sys/devices/pnp0/00:05/tty/ttyS0
sys-device...06-tty-ttyS1.device loaded active plugged   /sys/devices/pnp0/00:06/tty/ttyS1
sys-module-configfs.device       loaded active plugged   /sys/module/configfs
sys-module-fuse.device           loaded active plugged   /sys/module/fuse
sys-subsys...devices-eno1.device loaded active plugged   NetXtreme II BCM5708 Gigabit Ethe
sys-subsys...devices-eno2.device loaded active plugged   NetXtreme II BCM5708 Gigabit Ethe
-.mount                          loaded active mounted   /
boot.mount                       loaded active mounted   /boot
dev-hugepages.mount              loaded active mounted   Huge Pages File System
dev-mqueue.mount                 loaded active mounted   POSIX Message Queue File System
proc-fs-nfsd.mount               loaded active mounted   RPC Pipe File System
run-user-0-gvfs.mount            loaded active mounted   /run/user/0/gvfs
sys-fs-fuse-connections.mount    loaded active mounted   FUSE Control File System
sys-kernel-config.mount          loaded active mounted   Configuration File System
sys-kernel-debug.mount           loaded active mounted   Debug File System
var-lib-nfs-rpc_pipefs.mount     loaded active mounted   RPC Pipe File System
brandbot.path                    loaded active waiting   Flexible branding
cups.path                        loaded active waiting   CUPS Printer Service Spool
systemd-as...sword-plymouth.path loaded active waiting   Forward Password Requests to Plym
systemd-ask-password-wall.path   loaded active waiting   Forward Password Requests to Wall
session-6.scope                  loaded active abandoned Session 6 of user root
session-679.scope                loaded active running   Session 679 of user root
session-c3.scope                 loaded active running   Session c3 of user gdm
abrt-ccpp.service                loaded active exited    Install ABRT coredump hook
abrt-oops.service                loaded active running   ABRT kernel log watcher
abrtd.service                    loaded active running   ABRT Automated Bug Reporting Tool
accounts-daemon.service          loaded active running   Accounts Service
alsa-state.service               loaded active running   Manage Sound Card State (restore

<省略>

LOAD   = Reflects whether the unit definition was properly loaded.
ACTIVE = The high-level unit activation state, i.e. generalization of SUB.
SUB    = The low-level unit activation state, values depend on unit type.

138 loaded units listed. Pass --all to see loaded but inactive units, too.
To show all installed unit files use 'systemctl list-unit-files'.


これらの出力をファイル単位で見やすく ( list-unit-files ) して、なおかつサービスに限定する ( -t service ) コマンドとその出力が以下となります。


# systemctl list-unit-files -t service
UNIT FILE                                   STATE
abrt-ccpp.service                           enabled
abrt-oops.service                           enabled
abrt-pstoreoops.service                     disabled
abrt-vmcore.service                         enabled
abrt-xorg.service                           enabled
abrtd.service                               enabled
accounts-daemon.service                     enabled
alsa-restore.service                        static
alsa-state.service                          static
alsa-store.service                          static
anaconda-direct.service                     static
anaconda-noshell.service                    static
anaconda-shell@.service                     static
anaconda-sshd.service                       static
anaconda-tmux@.service                      static
anaconda.service                            static
arp-ethers.service                          disabled
atd.service                                 enabled
auditd.service                              enabled
autofs.service                              disabled
autovt@.service                             disabled
avahi-daemon.service                        enabled
blk-availability.service                    disabled
bluetooth.service                           enabled
<省略>

enableとなっているところは自動起動が有効、disabledとなっているのとは自動起動が無効という意味です。staticは他のユニットに依存するもので、これ単体で有効/無効が設定できないものです。これらユニットファイルの実体は以下のディレクトリに保存されています。

ディレクトリ名 説明 
/etc/systemd/system  ここに同名のファイル(/usr/libのシンボリックリンク)を配置することにより優先される。
/usr/lib/systemd/system RPMから直接ファイルが提供される場所であり、システムのデフォルト設定


# ls /etc/systemd/system/*.wants

/etc/systemd/system/basic.target.wants:
firewalld.service  microcode.service

/etc/systemd/system/bluetooth.target.wants:
bluetooth.service

/etc/systemd/system/default.target.wants:
systemd-readahead-collect.service  systemd-readahead-replay.service

/etc/systemd/system/getty.target.wants:
getty@tty1.service

/etc/systemd/system/graphical.target.wants:
accounts-daemon.service  firstboot-graphical.service  rtkit-daemon.service

/etc/systemd/system/multi-user.target.wants:
ModemManager.service    auditd.service        ksm.service             rngd.service
NetworkManager.service  avahi-daemon.service  ksmtuned.service        rpcbind.service
abrt-ccpp.service       chronyd.service       libstoragemgmt.service  rsyslog.service
abrt-oops.service       crond.service         libvirtd.service        smartd.service
abrt-vmcore.service     cups.path             mdmonitor.service       sshd.service
abrt-xorg.service       hypervkvpd.service    nfs.target              sysstat.service
abrtd.service           hypervvssd.service    postfix.service         tuned.service
atd.service             irqbalance.service    remote-fs.target        vmtoolsd.service
<省略>

上記ファイルはシンボリックリンクであり、実ファイルは/usr/lib/systemd/system以下のものにリンクされています。但し、優先されるのは/etc側となります。

# ls /usr/lib/systemd/system
-.slice                                  ntpdate.service
ModemManager.service                     numad.service
NetworkManager-dispatcher.service        oddjobd.service
NetworkManager-wait-online.service       packagekit-offline-update.service
NetworkManager.service                   paths.target
abrt-ccpp.service                        plymouth-halt.service
abrt-oops.service                        plymouth-kexec.service
abrt-pstoreoops.service                  plymouth-poweroff.service
abrt-vmcore.service                      plymouth-quit-wait.service
abrt-xorg.service                        plymouth-quit.service
abrtd.service                            plymouth-read-write.service
accounts-daemon.service                  plymouth-reboot.service
alsa-restore.service                     plymouth-start.service
alsa-state.service                       plymouth-switch-root.service
alsa-store.service                       polkit.service
anaconda-direct.service                  postfix.service
<省略>



■systemctlコマンドの使い方

ユニット名のところはタブキーで自動補完することが可能です。

・ユニットの起動停止


※起動
systemctl start <unit>

※停止
systemctl stop <unit>

※再起動
systemctl restart <unit>

・ユニットの自動起動の設定

※自動起動の有効化
systemctl enable <unit>

※自動起動の無効化
systemctl disable <unit>

※強制終了
systemctl kill -s 9 <unit>

※どのターゲットで有効にするか
/usr/lib/systemd/system以下の各ファイルの中で以下の部分に注目

WantedBy=multi-user.target

multi-user.targetはランレベル3、graphical.targetはランレベル5となる
但し、multi-user.targetを指定すれば自動的にguraphical.targetも有効となる

・ユニット状態の表示

※指定したユニットの状態表示
systemctl status <unit>

※アクティブになっているユニット一覧
systemctl 

※全てのユニット一覧
systemctl -a

※指定したタイプのユニットのみ表示
systemctl -t <unit_type>

ユニットタイプは冒頭で記載したもの

・ユニットのその他の情報

※ユニットの一覧表示
systemctl list-unit-files

※指定したユニットの設定表示
systemctl show <unit>

※指定したユニットが稼働中か否か
systemctl is-active <unit>

※指定したユニットが有効か否か
systemctl is-enabled <unit>

・ログの参照方法

CentOS6までは/var/log/messageあたりを参照・検索というのが一般的ですが、systemdからはそれ専用のコマンドが用意されています。

※特定サービスのログを参照
journalctl -u <unit>

特定サービスのログをリアルタイムに参照 
journalctl -f -u <unit>

※dmesgの代わり
journalctl -k または journalctl --dmesg

初期導入当初は不要なサービスが多々たちあがっているため、私の場合は以下のコマンドを実施して不要なサービスは停止するよう設定致しました。

systemctl disable abrt-ccpp.service
systemctl disable abrt-oops.service
systemctl disable abrt-vmcore.service
systemctl disable abrt-xorg.service
systemctl disable abrtd.service
systemctl disable atd.service
systemctl disable dbus-org.freedesktop.nm-dispatcher.service
systemctl disable auditd.service
systemctl disable avahi-daemon.service
systemctl disable bluetooth.service
systemctl disable accounts-daemon.service
systemctl disable avahi-daemon.service
systemctl disable dbus-org.freedesktop.ModemManager1.service
systemctl disable dmraid-activation.service
systemctl disable display-manager.service
systemctl disable firstboot-graphical.service
systemctl disable fprintd.service
systemctl disable gdm.service
systemctl disable hypervkvpd.service
systemctl disable hypervvssd.service
systemctl disable irqbalance.service
systemctl disable iscsi.service
systemctl disable ksm.service
systemctl disable ksmtuned.service
systemctl disable libstoragemgmt.service
systemctl disable libvirtd.service
systemctl disable lvm2-monitor.service
systemctl disable mdmonitor.service
systemctl disable microcode.service
systemctl disable ModemManager.service
systemctl disable multipathd.service
systemctl disable nfs-lock.service
systemctl disable packagekit-offline-update.service
systemctl disable postfix.service
systemctl disable rngd.service
systemctl disable rpcbind.service
systemctl disable rtkit-daemon.service
systemctl disable smartd.service
systemctl disable spice-vdagentd.service
systemctl disable sysstat.service
systemctl disable systemd-readahead-collect.service
systemctl disable systemd-readahead-drop.service
systemctl disable systemd-readahead-replay.service
systemctl disable tuned.service
systemctl disable vmtoolsd.service
systemctl disable cups.service
systemctl disable nfs-lock.service
systemctl disable rpc-statd.service
systemctl disable firewalld      

導入当初、NetworkManagerも合わせて停止するよう設定していたのですが、これを停止するとGatewayが消えてしまい、自身が属するセグメント外に出れなくなり、原因究明に時間を要しました。他に回避策があるかもしれませんがNetworkManagerは稼働させておいたほうが良いようです。


 Copyright(C) 2003-2015 UnixPower on Networking All rights reserved.