技術(shù)員聯(lián)盟提供win764位系統(tǒng)下載,win10,win7,xp,裝機純凈版,64位旗艦版,綠色軟件,免費軟件下載基地!

當前位置:主頁 > 教程 > 服務(wù)器類 >

Linux系統(tǒng)中的進程管理工具SystemD介紹

來源:技術(shù)員聯(lián)盟┆發(fā)布時間:2018-01-26 12:03┆點擊:

  SystemD是Linux下的一種init軟件,由Lennart Poettering帶頭開發(fā),并在LGPL 2.1及其后續(xù)版本許可證下開源發(fā)布。Lennart是redhat員工,但SystemD不是redhat項目。其開發(fā)目標是提供更優(yōu)秀的框架以表示系統(tǒng)服務(wù)間的依賴關(guān)系,并依此實現(xiàn)系統(tǒng)初始化時服務(wù)的并行啟動,同時達到降低Shell的系統(tǒng)開銷的效果,最終代替現(xiàn)在常用的System V與BSD風格init程序。

  SystemD這一名字源于Unix中的一個慣例:在Unix中常以“d”作為系統(tǒng)守護進程(英語:daemon,亦稱后臺進程)的后綴標識。除此以外,SystemD亦是借代英文術(shù)語D體系,而這一術(shù)語即是用于描述一個人具有快速地適應(yīng)環(huán)境并解決困難的能力。

  SystemD被設(shè)計用來改進SysVinit的缺點,與Ubuntu的upstart形成技術(shù)競爭。SystemD的很多概念來源于蘋果的launchd。目標是盡可能啟動更少進程;盡可能將更多進程并行啟動(這是性能優(yōu)于SysVinit的理念基礎(chǔ))。SystemD盡可能減少對Shell腳本的依賴。傳統(tǒng)SysVinit使用inittab來決定運行哪些Shell腳本,大量使用Shell腳本被認為是效率低下無法并行的原因。SystemD使用了Linux專屬技術(shù),不再顧及POSIX兼容,只要能滿足社會變革的需要,突破一些可能過時的技術(shù)約束,這也是當今創(chuàng)信理念的需要,相信市場會給出評判。

  與多數(shù)發(fā)行版使用的System V風格init相比,SystemD采用了以下新技術(shù):

  采用Socket激活式與總線激活式服務(wù),以提高相互依賴的各服務(wù)的并行運行性能;

  用cgroups代替PID來追蹤進程,因此即使是兩次fork之后生成的守護進程也不會脫離systemd的控制。

  從設(shè)計構(gòu)思上說,由于SystemD使用了cgroup與fanotify等組件以實現(xiàn)其特性,所以只適用于Linux。有鑒于此,基于kFreeBSD分支的軟件源無法納入SystemD。

  大多數(shù)主流發(fā)行版要么已經(jīng)采用 Systemd,要么即將在下個發(fā)布中采用(如 Debian 和 Ubuntu)。在本教程中,我們使用 Fedora 21(該發(fā)行版已經(jīng)是 Systemd 的優(yōu)秀實驗場地)的一個預(yù)覽版進行演示,但不論您用哪個發(fā)行版,要用到的命令和注意事項都應(yīng)該是一樣的。這是 Systemd 的一個加分點:它消除了不同發(fā)行版之間許多細微且瑣碎的區(qū)別。

  在終端中輸入 ps ax | grep systemd,看到第一行,其中的數(shù)字 1 表示它的進程號是1,也就是說它是 Linux 內(nèi)核發(fā)起的第一個程序。因此,內(nèi)核一旦檢測完硬件并組織好了內(nèi)存,就會運行 /usr/lib/systemd/systemd 可執(zhí)行程序,這個程序會按順序依次發(fā)起其他程序。(在還沒有 Systemd 的日子里,內(nèi)核會去運行 /sbin/init,隨后這個程序會在名為 SysVinit 的系統(tǒng)中運行其余的各種啟動腳本。)

  Systemd 的核心是一個叫單元 unit的概念,它是一些存有關(guān)于服務(wù)service(在運行在后臺的程序)、設(shè)備、掛載點、和操作系統(tǒng)其他方面信息的配置文件。Systemd 的其中一個目標就是簡化這些事物之間的相互作用,因此如果你有程序需要在某個掛載點被創(chuàng)建或某個設(shè)備被接入后開始運行,Systemd 可以讓這一切正常運作起來變得相當容易。(在沒有 Systemd 的日子里,要使用腳本來把這些事情調(diào)配好,那可是相當丑陋的。)要列出您 Linux 系統(tǒng)上的所有單元,輸入以下命令:

  復(fù)制代碼

  代碼如下:

  systemctl list-unit-files

  現(xiàn)在,systemctl 是與 Systemd 交互的主要工具,它有不少選項。在單元列表中,您會注意到這兒有一些格式化:被使能enabled的單元顯示為綠色,被禁用disabled的顯示為紅色。標記為“static”的單元不能直接啟用,它們是其他單元所依賴的對象。若要限制輸出列表只包含服務(wù),使用以下命令:

  復(fù)制代碼

  代碼如下:

  systemctl list-unit-files --type=service

  注意,一個單元顯示為“enabled”,并不等于對應(yīng)的服務(wù)正在運行,而只能說明它可以被開啟。要獲得某個特定服務(wù)的信息,以 GDM (Gnome Display Manager) 為例,輸入以下命令:

  復(fù)制代碼

  代碼如下:

  systemctl status gdm.service

  這條命令提供了許多有用的信息:一段給人看的服務(wù)描述、單元配置文件的位置、啟動的時間、進程號,以及它所從屬的 CGroups(用以限制各組進程的資源開銷)。

  如果您去查看位于 /usr/lib/systemd/system/gdm.service 的單元配置文件,您可以看到各種選項,包括要被運行的二進制文件(“ExecStart”那一行),相沖突的其他單元(即不能同時進入運行的單元),以及需要在本單元執(zhí)行前進入運行的單元(“After”那一行)。一些單元有附加的依賴選項,例如“Requires”(必要的依賴)和“Wants”(可選的依賴)。

  此處另一個有趣的選項是:

  復(fù)制代碼

  代碼如下:

  Alias=display-manager.service