Systemd 服務啟動和停止



systemd是Linux上執行服務的新方法。systemd已經取代了sysvinitsystemd為Linux帶來了更快的啟動時間,並且現在是管理Linux服務的標準方法。雖然穩定,但systemd仍在不斷發展。

systemd作為初始化系統,用於管理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-analyze blame命令。

[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時,瞭解單元的概念非常重要。單元systemd知道如何解釋的資源。單元分為以下12種類型:

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

在大多數情況下,我們將使用.service作為單元目標。建議對其他型別進行進一步的研究。因為只有.service單元適用於啟動和停止systemd服務。

每個單元都在以下位置的檔案中定義:

  • /lib/systemd/system - 基本單元檔案

  • /etc/systemd/system - 執行時啟動的修改後的單元檔案

使用systemctl管理服務

要使用systemd,我們需要非常熟悉systemctl命令。以下是systemctl最常用的命令列開關。

開關 動作
-t 單元型別的逗號分隔值,例如service或socket
-a 顯示所有已載入的單元
--state 顯示處於定義狀態的所有單元,例如:load、sub、active、inactive等。
-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

停止服務

首先,讓我們停止藍牙服務。

[root@localhost]# systemctl stop bluetooth

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

[root@localhost]#

我們可以看到,藍牙服務現在處於非活動狀態。

要再次啟動藍牙服務。

[root@localhost]# systemctl start bluetooth

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

[root@localhost]#

注意 - 我們沒有指定bluetooth.service,因為.service是隱含的。最好將單元型別與我們正在處理的服務一起考慮。因此,從現在開始,我們將使用.service副檔名來明確我們正在進行服務單元操作。

可以在服務上執行的主要操作包括:

啟動 啟動服務
停止 停止服務
重新載入 重新載入服務的活動配置,而無需停止它(例如system 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中啟動和停止守護程序服務的新方法。

廣告

© . All rights reserved.