1. 程式人生 > >Linux服務管理: chkconfig 和 systemctl 命令

Linux服務管理: chkconfig 和 systemctl 命令

對於 Linux 管理員來說這是一個重要(美妙)的話題,所以每個人都必須知道,並練習怎樣才能更高效的使用它們。

在 Linux 中,無論何時當你安裝任何帶有服務和守護程序的包,系統預設會把這些服務的初始化及 systemd 指令碼新增進去,不過此時它們並沒有被啟用。

我們需要手動的開啟或者關閉那些服務。Linux 中有三個著名的且一直在被使用的初始化系統。

什麼是初始化系統?

在以 Linux/Unix 為基礎的作業系統上,init (初始化的簡稱) 是核心引導系統啟動過程中第一個啟動的程序。

init 的程序 id (pid)是 1,除非系統關機否則它將會一直在後臺執行。

init 首先根據 /etc/inittab 檔案決定 Linux 執行的級別,然後根據執行級別在後臺啟動所有其他程序和應用程式。

BIOS、MBR、GRUB 和核心程式在啟動 init 之前就作為 Linux 的載入程式的一部分開始工作了。

下面是 Linux 中可以使用的執行級別(從 0~6 總共七個執行級別):

  • 0:關機
  • 1:單使用者模式
  • 2:多使用者模式(沒有NFS)
  • 3:完全的多使用者模式
  • 4:系統未使用
  • 5:圖形介面模式
  • 6:重啟

下面是 Linux 系統中最常用的三個初始化系統:

  • System V(Sys V)
  • Upstart
  • systemd
什麼是 System V(Sys V)?

System V(Sys V)是類 Unix 系統第一個也是傳統的初始化系統。init 是核心引導系統啟動過程中第一支啟動的程式,它是所有程式的父程序。

大部分 Linux 發行版最開始使用的是叫作 System V(Sys V)的傳統的初始化系統。在過去的幾年中,已經發布了好幾個初始化系統以解決標準版本中的設計限制,例如:launchd、Service Management Facility、systemd 和 Upstart。

但是 systemd 已經被幾個主要的 Linux 發行版所採用,以取代傳統的 SysV 初始化系統。

什麼是 Upstart?

Upstart 是一個基於事件的 /sbin/init 守護程序的替代品,它在系統啟動過程中處理任務和服務的啟動,在系統執行期間監視它們,在系統關機的時候關閉它們。

它最初是為 Ubuntu 而設計,但是它也能夠完美的部署在其他所有 Linux系統中,用來代替古老的 System-V。

Upstart 被用於 Ubuntu 從 9.10 到 Ubuntu 14.10 和基於 RHEL 6 的系統,之後它被 systemd 取代。

什麼是 systemd?

systemd 是一個新的初始化系統和系統管理器,它被用於所有主要的 Linux 發行版,以取代傳統的 SysV 初始化系統。

systemd 相容 SysV 和 LSB 初始化指令碼。它可以直接替代 SysV 初始化系統。systemd 是被核心啟動的第一個程式,它的 PID 是 1。

systemd 是所有程式的父程序,Fedora 15 是第一個用 systemd 取代 upstart 的發行版。systemctl 用於命令列,它是管理 systemd 的守護程序/服務的主要工具,例如:(開啟、重啟、關閉、啟用、禁用、過載和狀態)

systemd 使用 .service 檔案而不是 bash 指令碼(SysVinit 使用的)。systemd 將所有守護程序新增到 cgroups 中排序,你可以通過瀏覽 /cgroup/systemd 檔案檢視系統等級。

如何使用 chkconfig 命令啟用或禁用引導服務?

chkconfig 實用程式是一個命令列工具,允許你在指定執行級別下啟動所選服務,以及列出所有可用服務及其當前設定。

此外,它還允許我們從啟動中啟用或禁用服務。前提是你有超級管理員許可權(root 或者 sudo)執行這個命令。

所有的服務指令碼位於 /etc/rd.d/init.d檔案中

如何列出執行級別中所有的服務

--list 引數會展示所有的服務及其當前狀態(啟用或禁用服務的執行級別):

# chkconfig --list
NetworkManager     0:off    1:off    2:on    3:on    4:on    5:on    6:off
abrt-ccpp          0:off    1:off    2:off    3:on    4:off    5:on    6:off
abrtd              0:off    1:off    2:off    3:on    4:off    5:on    6:off
acpid              0:off    1:off    2:on    3:on    4:on    5:on    6:off
atd                0:off    1:off    2:off    3:on    4:on    5:on    6:off
auditd             0:off    1:off    2:on    3:on    4:on    5:on    6:off
.
.
如何檢視指定服務的狀態

如果你想檢視執行級別下某個服務的狀態,你可以使用下面的格式匹配出需要的服務。

比如說我想檢視執行級別中 auditd 服務的狀態

# chkconfig --list| grep auditd
auditd             0:off    1:off    2:on    3:on    4:on    5:on    6:off
如何在指定執行級別中啟用服務

使用 --level 引數啟用指定執行級別下的某個服務,下面展示如何在執行級別 3 和執行級別 5 下啟用 httpd 服務。

# chkconfig --level 35 httpd on
如何在指定執行級別下禁用服務

同樣使用 --level 引數禁用指定執行級別下的服務,下面展示的是在執行級別 3 和執行級別 5 中禁用 httpd 服務。

# chkconfig --level 35 httpd off
如何將一個新服務新增到啟動列表中
-–add 引數允許我們新增任何新的服務到啟動列表中,預設情況下,新新增的服務會在執行級別 2、3、4、5 下自動開啟。

# chkconfig --add nagios
如何從啟動列表中刪除服務

可以使用 --del 引數從啟動列表中刪除服務,下面展示的是如何從啟動列表中刪除 Nagios 服務。

# chkconfig --del nagios
如何使用 systemctl 命令啟用或禁用開機自啟服務?

systemctl 用於命令列,它是一個用來管理 systemd 的守護程序/服務的基礎工具,例如:(開啟、重啟、關閉、啟用、禁用、過載和狀態)。

所有服務建立的 unit 檔案位與 /etc/systemd/system/。

如何列出全部的服務

使用下面的命令列出全部的服務(包括啟用的和禁用的)。

# systemctl list-unit-files --type=service
UNIT FILE                                     STATE
arp-ethers.service                            disabled
auditd.service                                enabled
[email protected]                               enabled
blk-availability.service                      disabled
brandbot.service                              static
[email protected]                        static
chrony-wait.service                           disabled
chronyd.service                               enabled
cloud-config.service                          enabled
cloud-final.service                           enabled
cloud-init-local.service                      enabled
cloud-init.service                            enabled
console-getty.service                         disabled
console-shell.service                         disabled
[email protected]                      static
cpupower.service                              disabled
crond.service                                 enabled
.
.
150 unit files listed.

使用下面的格式通過正則表示式匹配出你想要檢視的服務的當前狀態。下面是使用 systemctl 命令檢視 httpd 服務的狀態。

# systemctl list-unit-files --type=service | grep httpd
httpd.service disabled
如何讓指定的服務開機自啟

使用下面格式的 systemctl 命令啟用一個指定的服務。啟用服務將會建立一個符號連結,如下可見:

# systemctl enable httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.

執行下列命令再次確認服務是否被啟用。

# systemctl is-enabled httpd
enabled
如何禁用指定的服務

執行下面的命令禁用服務將會移除你啟用服務時所建立的符號連結。

# systemctl disable httpd
Removed symlink /etc/systemd/system/multi-user.target.wants/httpd.service.

執行下面的命令再次確認服務是否被禁用。

# systemctl is-enabled httpd
disabled
如何檢視系統當前的執行級別

使用 systemctl 命令確認你係統當前的執行級別,runlevel 命令仍然可在 systemd 下工作,不過,執行級別對於 systemd 來說是一個歷史遺留的概念。所以我建議你全部使用 systemctl 命令。

我們當前處於執行級別 3, 它等同於下面顯示的 multi-user.target。

# systemctl list-units --type=target
UNIT                  LOAD   ACTIVE SUB    DESCRIPTION
basic.target          loaded active active Basic System
cloud-config.target   loaded active active Cloud-config availability
cryptsetup.target     loaded active active Local Encrypted Volumes
getty.target          loaded active active Login Prompts
local-fs-pre.target   loaded active active Local File Systems (Pre)
local-fs.target       loaded active active Local File Systems
multi-user.target     loaded active active Multi-User System
network-online.target loaded active active Network is Online
network-pre.target    loaded active active Network (Pre)
network.target        loaded active active Network
paths.target          loaded active active Paths
remote-fs.target      loaded active active Remote File Systems
slices.target         loaded active active Slices
sockets.target        loaded active active Sockets
swap.target           loaded active active Swap
sysinit.target        loaded active active System Initialization
timers.target         loaded active active Timers

via: https://www.2daygeek.com/how-to-enable-or-disable-services-on-boot-in-linux-using-chkconfig-and-systemctl-command/

作者:Prakash Subramanian 選題:lujun9972 譯者:way-ww 校對:wxy

本文由 LCTT 原創編譯,Linux中國 榮譽推出