如何使用chkconfig和systemctl命令啟用或禁用Linux服務(wù)
對于 Linux 管理員來說這是一個(gè)重要(美妙)的話題,所以每個(gè)人都必須知道,并練習(xí)怎樣才能更高效的使用它們。
在 Linux 中,無論何時(shí)當(dāng)你安裝任何帶有服務(wù)和守護(hù)進(jìn)程的包,系統(tǒng)默認(rèn)會把這些服務(wù)的初始化及 systemd 腳本添加進(jìn)去,不過此時(shí)它們并沒有被啟用。
我們需要手動的開啟或者關(guān)閉那些服務(wù)。Linux 中有三個(gè)著名的且一直在被使用的初始化系統(tǒng)。
什么是初始化系統(tǒng)?
在以 Linux/Unix 為基礎(chǔ)的操作系統(tǒng)上,init
(初始化的簡稱) 是內(nèi)核引導(dǎo)系統(tǒng)啟動過程中***個(gè)啟動的進(jìn)程。
init
的進(jìn)程 id (pid)是 1,除非系統(tǒng)關(guān)機(jī)否則它將會一直在后臺運(yùn)行。
init
首先根據(jù) /etc/inittab
文件決定 Linux 運(yùn)行的級別,然后根據(jù)運(yùn)行級別在后臺啟動所有其他進(jìn)程和應(yīng)用程序。
BIOS、MBR、GRUB 和內(nèi)核程序在啟動 init
之前就作為 Linux 的引導(dǎo)程序的一部分開始工作了。
下面是 Linux 中可以使用的運(yùn)行級別(從 0~6 總共七個(gè)運(yùn)行級別):
0
:關(guān)機(jī)1
:單用戶模式2
:多用戶模式(沒有NFS)3
:完全的多用戶模式4
:系統(tǒng)未使用5
:圖形界面模式6
:重啟
下面是 Linux 系統(tǒng)中最常用的三個(gè)初始化系統(tǒng):
- System V(Sys V)
- Upstart
- systemd
什么是 System V(Sys V)?
System V(Sys V)是類 Unix 系統(tǒng)***個(gè)也是傳統(tǒng)的初始化系統(tǒng)。init
是內(nèi)核引導(dǎo)系統(tǒng)啟動過程中***支啟動的程序,它是所有程序的父進(jìn)程。
大部分 Linux 發(fā)行版最開始使用的是叫作 System V(Sys V)的傳統(tǒng)的初始化系統(tǒng)。在過去的幾年中,已經(jīng)發(fā)布了好幾個(gè)初始化系統(tǒng)以解決標(biāo)準(zhǔn)版本中的設(shè)計(jì)限制,例如:launchd、Service Management Facility、systemd 和 Upstart。
但是 systemd 已經(jīng)被幾個(gè)主要的 Linux 發(fā)行版所采用,以取代傳統(tǒng)的 SysV 初始化系統(tǒng)。
什么是 Upstart?
Upstart 是一個(gè)基于事件的 /sbin/init
守護(hù)進(jìn)程的替代品,它在系統(tǒng)啟動過程中處理任務(wù)和服務(wù)的啟動,在系統(tǒng)運(yùn)行期間監(jiān)視它們,在系統(tǒng)關(guān)機(jī)的時(shí)候關(guān)閉它們。
它最初是為 Ubuntu 而設(shè)計(jì),但是它也能夠***的部署在其他所有 Linux系統(tǒng)中,用來代替古老的 System-V。
Upstart 被用于 Ubuntu 從 9.10 到 Ubuntu 14.10 和基于 RHEL 6 的系統(tǒng),之后它被 systemd 取代。
什么是 systemd?
systemd 是一個(gè)新的初始化系統(tǒng)和系統(tǒng)管理器,它被用于所有主要的 Linux 發(fā)行版,以取代傳統(tǒng)的 SysV 初始化系統(tǒng)。
systemd 兼容 SysV 和 LSB 初始化腳本。它可以直接替代 SysV 初始化系統(tǒng)。systemd 是被內(nèi)核啟動的***個(gè)程序,它的 PID 是 1。
systemd 是所有程序的父進(jìn)程,F(xiàn)edora 15 是***個(gè)用 systemd 取代 upstart 的發(fā)行版。systemctl
用于命令行,它是管理 systemd 的守護(hù)進(jìn)程/服務(wù)的主要工具,例如:(開啟、重啟、關(guān)閉、啟用、禁用、重載和狀態(tài))
systemd 使用 .service 文件而不是 bash 腳本(SysVinit 使用的)。systemd 將所有守護(hù)進(jìn)程添加到 cgroups 中排序,你可以通過瀏覽 /cgroup/systemd
文件查看系統(tǒng)等級。
如何使用 chkconfig 命令啟用或禁用引導(dǎo)服務(wù)?
chkconfig
實(shí)用程序是一個(gè)命令行工具,允許你在指定運(yùn)行級別下啟動所選服務(wù),以及列出所有可用服務(wù)及其當(dāng)前設(shè)置。
此外,它還允許我們從啟動中啟用或禁用服務(wù)。前提是你有超級管理員權(quán)限(root 或者 sudo
)運(yùn)行這個(gè)命令。
所有的服務(wù)腳本位于 /etc/rd.d/init.d
文件中
如何列出運(yùn)行級別中所有的服務(wù)
--list
參數(shù)會展示所有的服務(wù)及其當(dāng)前狀態(tài)(啟用或禁用服務(wù)的運(yùn)行級別):
# 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
.
.
如何查看指定服務(wù)的狀態(tài)
如果你想查看運(yùn)行級別下某個(gè)服務(wù)的狀態(tài),你可以使用下面的格式匹配出需要的服務(wù)。
比如說我想查看運(yùn)行級別中 auditd
服務(wù)的狀態(tài)
# chkconfig --list| grep auditd
auditd 0:off 1:off 2:on 3:on 4:on 5:on 6:off
如何在指定運(yùn)行級別中啟用服務(wù)
使用 --level
參數(shù)啟用指定運(yùn)行級別下的某個(gè)服務(wù),下面展示如何在運(yùn)行級別 3 和運(yùn)行級別 5 下啟用 httpd
服務(wù)。
# chkconfig --level 35 httpd on
如何在指定運(yùn)行級別下禁用服務(wù)
同樣使用 --level
參數(shù)禁用指定運(yùn)行級別下的服務(wù),下面展示的是在運(yùn)行級別 3 和運(yùn)行級別 5 中禁用 httpd
服務(wù)。
# chkconfig --level 35 httpd off
如何將一個(gè)新服務(wù)添加到啟動列表中
-–add
參數(shù)允許我們添加任何新的服務(wù)到啟動列表中,默認(rèn)情況下,新添加的服務(wù)會在運(yùn)行級別 2、3、4、5 下自動開啟。
# chkconfig --add nagios
如何從啟動列表中刪除服務(wù)
可以使用 --del
參數(shù)從啟動列表中刪除服務(wù),下面展示的是如何從啟動列表中刪除 Nagios 服務(wù)。
# chkconfig --del nagios
如何使用 systemctl 命令啟用或禁用開機(jī)自啟服務(wù)?
systemctl
用于命令行,它是一個(gè)用來管理 systemd 的守護(hù)進(jìn)程/服務(wù)的基礎(chǔ)工具,例如:(開啟、重啟、關(guān)閉、啟用、禁用、重載和狀態(tài))。
所有服務(wù)創(chuàng)建的 unit 文件位與 /etc/systemd/system/
。
如何列出全部的服務(wù)
使用下面的命令列出全部的服務(wù)(包括啟用的和禁用的)。
# systemctl list-unit-files --type=service
UNIT FILE STATE
arp-ethers.service disabled
auditd.service enabled
autovt@.service enabled
blk-availability.service disabled
brandbot.service static
chrony-dnssrv@.service 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
container-getty@.service static
cpupower.service disabled
crond.service enabled
.
.
150 unit files listed.
使用下面的格式通過正則表達(dá)式匹配出你想要查看的服務(wù)的當(dāng)前狀態(tài)。下面是使用 systemctl
命令查看 httpd
服務(wù)的狀態(tài)。
# systemctl list-unit-files --type=service | grep httpd
httpd.service disabled
如何讓指定的服務(wù)開機(jī)自啟
使用下面格式的 systemctl
命令啟用一個(gè)指定的服務(wù)。啟用服務(wù)將會創(chuàng)建一個(gè)符號鏈接,如下可見:
# systemctl enable httpd
Created symlink from /etc/systemd/system/multi-user.target.wants/httpd.service to /usr/lib/systemd/system/httpd.service.
運(yùn)行下列命令再次確認(rèn)服務(wù)是否被啟用。
# systemctl is-enabled httpd
enabled
如何禁用指定的服務(wù)
運(yùn)行下面的命令禁用服務(wù)將會移除你啟用服務(wù)時(shí)所創(chuàng)建的符號鏈接。
# systemctl disable httpd
Removed symlink /etc/systemd/system/multi-user.target.wants/httpd.service.
運(yùn)行下面的命令再次確認(rèn)服務(wù)是否被禁用。
# systemctl is-enabled httpd
disabled
如何查看系統(tǒng)當(dāng)前的運(yùn)行級別
使用 systemctl
命令確認(rèn)你系統(tǒng)當(dāng)前的運(yùn)行級別,runlevel
命令仍然可在 systemd 下工作,不過,運(yùn)行級別對于 systemd 來說是一個(gè)歷史遺留的概念。所以我建議你全部使用 systemctl
命令。
我們當(dāng)前處于運(yùn)行級別 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