對於 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 --listNetworkManager 0:off1:off2:on3:on4:on5:on6:offabrt-ccpp0:off1:off2:off3:on4:off5:on6:offabrtd0:off1:off2:off3:on4:off5:on6:offacpid0:off1:off2:on3:on4:on5:on6:offatd0:off1:off2:off3:on4:on5:on6:offauditd 0:off1:off2:on3:on4:on5:on6:off..

  如何查看指定服務的狀態

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

  比如說我想查看運行級別中 auditd 服務的狀態

  # chkconfig --list| grep auditdauditd 0:off1:off2:on3:on4:on5:on6: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=serviceUNIT FILE STATEarp-ethers.servicedisabledauditd.serviceenabledautovt@.service enabledblk-availability.servicedisabledbrandbot.servicestaticchrony-dnssrv@.servicestaticchrony-wait.service disabledchronyd.service enabledcloud-config.serviceenabledcloud-final.service enabledcloud-init-local.serviceenabledcloud-init.serviceenabledconsole-getty.service disabledconsole-shell.service disabledcontainer-getty@.servicestaticcpupower.servicedisabledcrond.service enabled..150 unit files listed.

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

  # systemctl list-unit-files --type=service | grep httpdhttpd.service disabled

  如何讓指定的服務開機自啓

  使用下面格式的 systemctl 命令啓用一個指定的服務。啓用服務將會創建一個符號鏈接,如下可見:

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

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

  # systemctl is-enabled httpdenabled

  如何禁用指定的服務

  運行下面的命令禁用服務將會移除你啓用服務時所創建的符號鏈接。

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

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

  disabled

  如何查看系統當前的運行級別

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

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

  # systemctl list-units --type=targetUNITLOAD ACTIVE SUBDESCRIPTIONbasic.targetloaded active active Basic Systemcloud-config.target loaded active active Cloud-config availabilitycryptsetup.target loaded active active Local Encrypted Volumesgetty.targetloaded 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.targetloaded active active Network (Pre)network.targetloaded active active Networkpaths.targetloaded active active Pathsremote-fs.targetloaded active active Remote File Systemsslices.target loaded active active Slicessockets.targetloaded active active Socketsswap.target loaded active active Swapsysinit.targetloaded active active System Initializationtimers.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中國榮譽推出

查看原文 >>
相關文章