Systemdサービスの開始と停止

systemdLinuxでサービスを実行する新しい方法です。systemdには、置き換えられたsysvinitがあります。systemdはLinuxの起動時間を短縮し、Linuxサービスを管理するための標準的な方法になりました。systemdは安定していますが、まだ進化しています。

systemdはinitシステムとして使用され、Linuxカーネルの起動後にステータスの変更が必要なサービスとデーモンの両方を管理するために使用されます。ステータス変更により、サービス状態の開始、停止、リロード、調整が適用されます。

まず、サーバーで現在実行されているsystemdのバージョンを確認しましょう。

[centos@localhost ~]$ systemctl --version 
systemd 219 
+PAM +AUDIT +SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP 
+GCRYPT +GNUTLS +ACL     +XZ -LZ4 -SECCOMP +BLKID +ELFUTILS +KMOD +IDN

[centos@localhost ~]$

CentOSバージョン7の時点で、この記事の執筆時点で完全に更新されているsystemdバージョン219が現在の安定バージョンです。

systemd-analyzeを使用して、サーバーの最終起動時間を分析することもできます。

[centos@localhost ~]$ systemd-analyze    
Startup finished in 1.580s (kernel) + 908ms (initrd) + 53.225s (userspace) = 55.713s 
[centos@localhost ~]$

システムの起動時間が遅い場合は、systemd-analyzeblameコマンドを使用できます。

[centos@localhost ~]$ systemd-analyze blame 
   40.882s kdump.service 
   5.775s NetworkManager-wait-online.service 
   4.701s plymouth-quit-wait.service 
   3.586s postfix.service 
   3.121s systemd-udev-settle.service 
   2.649s tuned.service 
   1.848s libvirtd.service 
   1.437s network.service 
   875ms packagekit.service 
   855ms gdm.service 
   514ms firewalld.service 
   438ms rsyslog.service
   436ms udisks2.service 
   398ms sshd.service 
   360ms boot.mount 
   336ms polkit.service 
   321ms accounts-daemon.service

で作業する場合にsystemd、の概念を理解することが重要である単位をUnitssystemdが解釈する方法を知っているリソースです。ユニットは次のように12種類に分類されます-

  • .service
  • .socket
  • .device
  • .mount
  • .automount
  • .swap
  • .target
  • .path
  • .timer
  • .snapshot
  • .slice
  • .scope

ほとんどの場合、ユニットターゲットとして.serviceを使用します。他のタイプについては、さらに調査することをお勧めします。systemdサービスの開始と停止には、.serviceユニットのみが適用されます。

ユニットは、次のいずれかにあるファイルで定義されます。

  • /lib/systemd/system −ベースユニットファイル

  • /etc/systemd/system −実行時に開始された変更されたユニットファイル

systemctlを使用してサービスを管理する

で動作するようにsystemd、我々は非常に精通取得する必要がありますsystemctlのコマンド。以下は、systemctlの最も一般的なコマンドラインスイッチです。

スイッチ アクション
-t サービスやソケットなどのユニットタイプのカンマ区切り値
-a ロードされたすべてのユニットを表示します
- 状態 ロード、サブ、アクティブ、非アクティブなど、定義された状態のすべてのユニットを表示します。
-H リモートで操作を実行します。@で区切ってホスト名またはホストとユーザーを指定します。

基本的なsystemctlの使用法

systemctl [operation]
example: systemctl --state [servicename.service]

ボックスで実行されているすべてのサービスを簡単に確認できます。

[root@localhost rdc]# systemctl -t service 
UNIT                       LOAD     ACTIVE      SUB     DESCRIPTION

abrt-ccpp.service          loaded   active   exited     Install ABRT coredump   hook 
abrt-oops.service          loaded   active   running    ABRT kernel log watcher 
abrt-xorg.service          loaded   active   running    ABRT Xorg 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 and store) 
atd.service                loaded   active   running    Job spooling tools 
auditd.service             loaded   active   running    Security Auditing Service 
avahi-daemon.service       loaded   active   running    Avahi mDNS/DNS-SD Stack 
blk-availability.service   loaded   active   exited     Availability of block devices 
bluetooth.service          loaded   active   running    Bluetooth service 
chronyd.service            loaded   active   running    NTP client/server

サービスの停止

まず、Bluetoothサービスを停止しましょう。

[root@localhost]# systemctl stop bluetooth

[root@localhost]# systemctl --all -t service | grep bluetooth      
bluetooth.service   loaded    inactive dead    Bluetooth service

[root@localhost]#

ご覧のとおり、Bluetoothサービスは現在非アクティブです。

Bluetoothサービスを再開します。

[root@localhost]# systemctl start bluetooth

[root@localhost]# systemctl --all -t service | grep bluetooth 
bluetooth.service  loaded    active   running Bluetooth     service

[root@localhost]#

Note.serviceが暗黙指定されているため、bluetooth.serviceを指定しませんでした。扱っているサービスに追加するユニットタイプを考えることをお勧めします。したがって、これ以降は、.service拡張子を使用して、サービスユニットの操作に取り組んでいることを明確にします。

サービスで実行できる主なアクションは次のとおりです。

開始 サービスを開始します
やめる サービスを停止します
リロード サービスを停止せずにアクティブな構成をリロードします(システムv initのkill-HUPなど)
再起動 サービスを開始してから停止します
有効にする 起動時にサービスを開始します
無効にする 実行時にサービスが自動的に開始されないようにします

上記のアクションは、主に次のシナリオで使用されます-

開始 停止状態になっているサービスを起動します。
やめる サービスを一時的にシャットダウンするため(たとえば、サービスをアップグレードするときのように、サービスによってロックされたファイルにアクセスするためにサービスを停止する必要がある場合)
リロード 構成ファイルが編集されていて、サービスを停止せずに新しい変更を適用したい場合。
再起動 リロードと同じシナリオですが、サービスはリロードをサポートしていません。
有効にする 無効化されたサービスを起動時に実行する場合。
無効にする 主にサービスを停止する必要がある場合に使用されますが、起動時に開始されます。

サービスのステータスを確認するには-

[root@localhost]# systemctl status network.service 
network.service - LSB: Bring up/down networking 
Loaded: loaded (/etc/rc.d/init.d/network; bad; vendor preset: disabled) 
Active: active (exited) since Sat 2017-01-14 04:43:48 EST; 1min 31s ago 
Docs: man:systemd-sysv-generator(8)

Process: 923 ExecStart = /etc/rc.d/init.d/network start (code=exited, status = 0/SUCCESS)

localhost.localdomain systemd[1]: Starting LSB: Bring up/down networking... 
localhost.localdomain network[923]: Bringing up loopback interface:  [  OK  ] 
localhost.localdomain systemd[1]: Started LSB: Bring up/down networking.

[root@localhost]#

ネットワークサービスの現在のステータスを表示します。ネットワークに関連するすべてのサービスを確認したい場合は、-を使用できます。

[root@localhost]# systemctl --all -t service | grep -i network 
network.service                       loaded    active    exited    LSB: Bring up/ 
NetworkManager-wait-online.service    loaded    active    exited    Network Manager  
NetworkManager.service                loaded    active    running   Network Manager 
ntpd.service                          loaded    inactive  dead      Network Time  
rhel-import-state.service             loaded    active    exited    Import network      

[root@localhost]#

に精通している人のために sysinitサービスを管理する方法では、systemdに移行することが重要です。systemdは、Linuxでデーモンサービスを開始および停止する新しい方法です。