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























