好湿?好紧?好多水好爽自慰,久久久噜久噜久久综合,成人做爰A片免费看黄冈,机机对机机30分钟无遮挡

主頁 > 知識庫 > CentOS 7下systemd管理的詳解

CentOS 7下systemd管理的詳解

熱門標簽:北京外呼系統官網 新鄉智能電話機器人有用嗎 ai外呼系統定制 北京大興區地圖標注中心 浙江虛擬外呼系統費用 AI智能語音外呼系統是什么 荊門真人語音電話機器人哪個好 淮安人工外呼系統 海外文化宮地圖標注

CentOS系統啟動流程:

POST --> Boot Sequence --> Bootloader --> kernel + initramfs(initrd) --> rootfs --> /sbin/init

innit程序:

CentOS 5:SysV init

CetnOS 6:  Upstart

CentOS 7 : Systemd

Systemd新特性:

系統Sys V init和LSB init scripts兼容

系統引導時實現服務并行啟動;采用socket / D-Bus activation等技術啟動服務;為了減少系統啟動時間,systemd的目標是:盡可能啟動更少的進程;盡可能將更多的進程并行啟動;

按需激活進程;Systemd可以提供按需啟動的能力,只有在某個服務被真正請求的時候才啟動它。當該服務結束,systemd可以關閉它,等待下次需要時再次啟動它。

能夠對系統進行快照和恢復;

啟動掛載點和自動掛載點的管理:

Systemd自助管理系統上的掛載點,以便能夠在系統啟動時自動掛載它們。且兼容/etc/fstab文件;

實現事務依賴關系管理:

systemd 維護一個"事務一致性"的概念,保證所有相關的服務都可以正常啟動而不會出現互相依賴,以至于死鎖的情況。

基于內生依賴關系定義服務控制邏輯;

system利用Linux內核的特性即CGroup來完成進程跟蹤的任務。當停止服務時,通過查詢CGroup,systemd可以確保找到所有的相關進程,從而干凈地停止服務;

日志服務:systemd自帶日志服務journald,該日志服務的設計初衷是克服現有的syslog服務的缺點。

System的基本概念

單元的概念:

系統初始化需要做的事情非常多。需要啟動后臺服務,比如啟動 SSHD 服務;需要做配置工作,比如掛載文件系統。這個過程中的每一步都被 systemd 抽象為一個配置單元,即 unit。可以認為一個服務是一個配置單元;一個掛載點是一個配置單元;一個交換分區的配置是一個配置單元;等等。systemd 將配置單元歸納為以下一些不同的類型。然而,systemd 正在快速發展,新功能不斷增加。所以配置單元類型可能在不久的將來繼續增加。

service:代表一個后臺服務進程,比如mysqld。這是常用的一類;

socket:此類配置單元封裝系統和互聯網中的一個套接字。當下,systemd支持流式、數據包和連續包的AF_INET、AF_INET6、AF_UNIX socket。每一個套接字配置單元都有一個相應的服務配置單元 。相應的服務在第一個"連接"進入套接字時就會啟動(例如:nscd.socket 在有新連接后便啟動 nscd.service)。

device :此類配置單元封裝一個存在于 Linux 設備樹中的設備。每一個使用 udev 規則標記的設備都將會在 systemd 中作為一個設備配置單元出現。

mount :此類配置單元封裝文件系統結構層次中的一個掛載點。Systemd 將對這個掛載點進行監控和管理。比如可以在啟動時自動將其掛載;可以在某些條件下自動卸載。Systemd 會將/etc/fstab 中的條目都轉換為掛載點,并在開機時處理。

automount :此類配置單元封裝系統結構層次中的一個自掛載點。每一個自掛載配置單元對應一個掛載配置單元 ,當該自動掛載點被訪問時,systemd 執行掛載點中定義的掛載行為。

swap: 和掛載配置單元類似,交換配置單元用來管理交換分區。用戶可以用交換配置單元來定義系統中的交換分區,可以讓這些交換分區在啟動時被激活。

target :此類配置單元為其他配置單元進行邏輯分組。它們本身實際上并不做什么,只是引用其他配置單元而已。這樣便可以對配置單元做一個統一的控制。這樣就可以實現大家都已經非常熟悉的運行級別概念。比如想讓系統進入圖形化模式,需要運行許多服務和配置命令,這些操作都由一個個的配置單元表示,將所有這些配置單元組合為一個目標(target),就表示需要將這些配置單元全部執行一遍以便進入目標所代表的系統運行狀態。 (例如:multi-user.target 相當于在傳統使用 SysV 的系統中運行級別 3)

timer:定時器配置單元用來定時觸發用戶定義的操作,這類配置單元取代了 atd、crond 等傳統的定時服務。

snapshot :與 target 配置單元相似,快照是一組配置單元。它保存了系統當前的運行狀態。

依賴關系:

雖然 systemd 將大量的啟動工作解除了依賴,使得它們可以并發啟動。但還是存在有些任務,它們之間存在天生的依賴,不能用"套接字激活"(socket activation)、D-Bus activation 和 autofs 三大方法來解除依賴(三大方法詳情見后續描述)。比如:掛載必須等待掛載點在文件系統中被創建;掛載也必須等待相應的物理設備就緒。為了解決這類依賴問題,systemd 的配置單元之間可以彼此定義依賴關系。

Systemd 用配置單元定義文件中的關鍵字來描述配置單元之間的依賴關系。比如:unit A 依賴 unit B,可以在 unit B 的定義中用"require A"來表示。這樣 systemd 就會保證先啟動 A 再啟動 B。

Systemd事務:

Systemd 能保證事務完整性。Systemd 的事務概念和數據庫中的有所不同,主要是為了保證多個依賴的配置單元之間沒有環形引用。 存在循環依賴,那么 systemd 將無法啟動任意一個服務。此時systemd 將會嘗試解決這個問題,因為配置單元之間的依賴關系有兩種:required是強依賴;want 則是弱依賴,systemd 將去掉 wants 關鍵字指定的依賴看看是否能打破循環。如果無法修復,systemd會報錯。

Systemd 能夠自動檢測和修復這類配置錯誤,極大地減輕了管理員的排錯負擔。

Target和運行級別:

systemd 用目標(target)替代了運行級別的概念,提供了更大的靈活性,如您可以繼承一個已有的目標,并添加其它服務,來創建自己的目標。下表列舉了 systemd 下的目標和常見 runlevel 的對應關系:

Systemd 的并發啟動原理

如前所述,在 Systemd 中,所有的服務都并發啟動,比如Avahi、D-Bus、livirtd、X11、HAL 可以同時啟動。乍一看,這似乎有點兒問題,比如 Avahi 需要syslog 的服務,Avahi 和syslog 同時啟動,假設 Avahi 的啟動比較快,所以syslog 還沒有準備好,可是 Avahi 又需要記錄日志,這豈不是會出現問題?

Systemd 的開發人員仔細研究了服務之間相互依賴的本質問題,發現所謂依賴可以分為三個具體的類型,而每一個類型實際上都可以通過相應的技術解除依賴關系。

并發啟動原理之一:解決 socket 依賴

絕大多數的服務依賴是套接字依賴。比如服務A 通過一個套接字端口S1 提供自己的服務,其他的服務如果需要服務A,則需要連接S1。因此如果服務A 尚未啟動,S1就不存在,其他的服務就會得到啟動錯誤。所以傳統地,人們需要先啟動服務A,等待它進入就緒狀態,再啟動其他需要它的服務。Systemd認為,只要我們預先把S1 建立好,那么其他所有的服務就可以同時啟動而無需等待服務A 來創建S1 了。如果服務A 尚未啟動,那么其他進程向S1 發送的服務請求實際上會被Linux 操作系統緩存,其他進程會在這個請求的地方等待。一旦服務A 啟動就緒,就可以立即處理緩存的請求,一切都開始正常運行。

那么服務如何使用由 init 進程創建的套接字呢?

Linux 操作系統有一個特性,當進程調用fork 或者exec 創建子進程之后,所有在父進程中被打開的文件句柄(file descriptor) 都被子進程所繼承。套接字也是一種文件句柄,進程A 可以創建一個套接字,此后當進程A 調用 exec啟動一個新的子進程時,只要確保該套接字的close_on_exec 標志位被清空,那么新的子進程就可以繼承這個套接字。子進程看到的套接字和父進程創建的套接字是同一個系統套接字,就仿佛這個套接字是子進程自己創建的一樣,沒有任何區別。

這個特性以前被一個叫做 inetd 的系統服務所利用。Inetd 進程會負責監控一些常用套接字端口,比如Telnet,當該端口有連接請求時,inetd才啟動 telnetd 進程,并把有連接的套接字傳遞給新的telnetd 進程進行處理。這樣,當系統沒有telnet 客戶端連接時,就不需要啟動telnetd 進程。Inetd可以代理很多的網絡服務,這樣就可以節約很多的系統負載和內存資源,只有當有真正的連接請求時才啟動相應服務,并把套接字傳遞給相應的服務進程。

和 inetd 類似,systemd 是所有其他進程的父進程,它可以先建立所有需要的套接字,然后在調用exec 的時候將該套接字傳遞給新的服務進程,而新進程直接使用該套接字進行服務即可。

并發啟動原理之二:解決 D-Bus 依賴

D-Bus 是 desktop-bus 的簡稱,是一個低延遲、低開銷、高可用性的進程間通信機制。它越來越多地用于應用程序之間通信,也用于應用程序和操作系統內核之間的通信。很多現代的服務進程都使用D-Bus取代套接字作為進程間通信機制,對外提供服務。比如簡化Linux 網絡配置的NetworkManager 服務就使用D-Bus 和其他的應用程序或者服務進行交互:郵件客戶端軟件evolution 可以通過D-Bus 從NetworkManager 服務獲取網絡狀態的改變,以便做出相應的處理。

D-Bus 支持所謂"busactivation"功能。如果服務A 需要使用服務 B 的 D-Bus 服務,而服務 B 并沒有運行,則 D-Bus 可以在服務 A 請求服務 B 的 D-Bus 時自動啟動服務 B。而服務 A 發出的請求會被 D-Bus 緩存,服務 A 會等待服務 B 啟動就緒。利用這個特性,依賴D-Bus 的服務就可以實現并行啟動。

并發啟動原理之三:解決文件系統依賴

系統啟動過程中,文件系統相關的活動是最耗時的,比如掛載文件系統,對文件系統進行磁盤檢查(fsck),磁盤配額檢查等都是非常耗時的操作。在等待這些工作完成的同時,系統處于空閑狀態。那些想使用文件系統的服務似乎必須等待文件系統初始化完成才可以啟動。但是systemd 發現這種依賴也是可以避免的。

Systemd 參考了 autofs 的設計思路,使得依賴文件系統的服務和文件系統本身初始化兩者可以并發工作。autofs可以監測到某個文件系統掛載點真正被訪問到的時候才觸發掛載操作,這是通過內核automounter 模塊的支持而實現的。比如一個open()系統調用作用在"/misc/cd/file1"的時候,/misc/cd 尚未執行掛載操作,此時 open()調用被掛起等待,Linux 內核通知 autofs,autofs 執行掛載。這時候,控制權返回給open()系統調用,并正常打開文件。

Systemd 集成了 autofs 的實現,對于系統中的掛載點,比如/home,當系統啟動的時候,systemd 為其創建一個臨時的自動掛載點。在這個時刻/home真正的掛載設備尚未啟動好,真正的掛載操作還沒有執行,文件系統檢測也還沒有完成。可是那些依賴該目錄的進程已經可以并發啟動,他們的open()操作被內建在systemd 中的autofs 捕獲,將該open()調用掛起(可中斷睡眠狀態)。然后等待真正的掛載操作完成,文件系統檢測也完成后,systemd將該自動掛載點替換為真正的掛載點,并讓open()調用返回。由此,實現了那些依賴于文件系統的服務和文件系統本身同時并發啟動。

當然對于"/"根目錄的依賴實際上一定還是要串行執行,因為systemd 自己也存放在/之下,必須等待系統根目錄掛載檢查好。

不過對于類似/home 等掛載點,這種并發可以提高系統的啟動速度,尤其是當/home是遠程的 NFS 節點,或者是加密盤等,需要耗費較長的時間才可以準備就緒的情況下,因為并發啟動,這段時間內,系統并不是完全無事可做,而是可以利用這段空余時間做更多的啟動進程的事情,總的來說就縮短了系統啟動時間。

Systemd 的使用

下面針對技術人員的不同角色來簡單地介紹一下 systemd 的使用。本文只打算給出簡單的描述,讓您對 systemd 的使用有一個大概的理解。具體的細節內容太多,即無法在一篇短文內寫全。還需要讀者自己去進一步查閱 systemd的文檔。

Unit 文件的編寫

開發人員開發了一個新的服務程序,比如httpd,就需要為其編寫一個配置單元文件以便該服務可以被systemd 管理,類似UpStart 的工作配置文件。在該文件中定義服務啟動的命令行語法,以及和其他服務的依賴關系等。

此外我們之前已經了解到,systemd 的功能繁多,不僅用來管理服務,還可以管理掛載點,定義定時任務等。這些工作都是由編輯相應的配置單元文件完成的。我在這里給出幾個配置單元文件的例子。

下面是 SSH 服務的配置單元文件,服務配置單元文件以.service為文件名后綴。

[root@kalaguiyin system]# cat/usr/lib/systemd/system/sshd.service 

[Unit]

Description=OpenSSH server daemon

After=network.target sshd-keygen.service

Wants=sshd-keygen.service

#[unit]部分,描述信息

[Service]

EnvironmentFile=/etc/sysconfig/sshd

ExecStart=/usr/sbin/sshd -D $OPTIONS

ExecReload=/bin/kill -HUP $MAINPID

KillMode=process

Restart=on-failure

RestartSec=42s

#[service]定義,ExecStartPre定義啟動服務之前應該運行的命令;

#ExecStart 定義啟動服務的具體命令行語法。

[Install]

WantedBy=multi-user.target

#[install]部分:WangtedBy表明這個服務是在多用戶模式下所需要的。

那我們就來看下multi-user.target 吧:

[root@kalaguiyin system]# catmulti-user.target

[Unit]

Description=Multi-User System

Documentation=man:systemd.special(7)

Requires=basic.target

Conflicts=rescue.service rescue.target

After=basic.target rescue.servicerescue.target

AllowIsolate=yes

# Requires 定義表明 multi-user.target 啟動的時候 basic.target 也必須被啟動;另外 basic.target 停止的時# 候,multi-user.target 也必須停止。如果您接著查看 basic.target 文件,會發現它又指定了 sysinit.target 

# 其他的單元必須隨之啟動。同樣 sysinit.target 也會包含其他的單元。采用這樣的層層鏈接的結構,最終所# 有需要支持多用戶模式的組件服務都會被初始化啟動好。

[Install]

Alias=default.target

#  Alias 定義,即定義本單元的別名,這樣在運行 systemctl 的時候就可以使用這個別名來引用本單元。

此外在/etc/systemd/system 目錄下還可以看到諸如*.wants 的目錄,放在該目錄下的配置單元文件等同于在[Unit]小節中的 wants 關鍵字,即本單元啟動時,還需要啟動這些單元。比如您可以簡單地把您自己寫的 foo.service 文件放入 multi-user.target.wants 目錄下,這樣每次都會被默認啟動了。

[root@kalaguiyin system]# pwd

/etc/systemd/system

[root@kalaguiyin system]# ls

basic.target.wants                          display-manager.service

bluetooth.target.wants                       getty.target.wants

dbus-org.bluez.service                       graphical.target.wants

printer.target.wants                                             sockets.target.wants

spice-vdagentd.target.wants                                            default.target    sysinit.target.wants                                              default.target.wants

再讓我們來看看sys-kernel-debug.mout文件,這個文件定義了一個文件掛載點:

[root@kalaguiyin system]# cat

sys-kernel-debug.mount

[Unit]

Description=Debug File System

Documentation=https://www.kernel.org/doc/Documentation/filesystems/debugfs.txt

Documentation=http://www.freedesktop.org/wiki/Software/systemd/APIFileSystems

DefaultDependencies=no

ConditionPathExists=/sys/kernel/debug

Before=sysinit.target

[Mount]

What=debugfs

Where=/sys/kernel/debug

Type=debugfs

這個配置單元文件定義了一個掛載點。掛載配置單元文件有一個[Mount]配置小節,里面配置了 What,Where 和Type 三個數據項。這都是掛載命令所必須的,例子中的配置等同于下面這個掛載命令:

mount –t debugfs /sys/kernel/debug debugfs

Systemd系統管理:

systemd 的主要命令行工具是 systemctl。

多數管理員應該都已經非常熟悉系統服務和 init 系統的管理,比如 service、chkconfig以及 telinit 命令的使用。systemd 也完成同樣的管理任務,只是命令工具systemctl 的語法有所不同而已。

啟動服務

systemctl start httpd.service 如圖1:

停止服務

systemctl stop httpd.service  如圖2:

重啟服務

systemctl restarthttpd.service  如圖3:

重載服務

systemctl reloadhttpd.service

條件式重啟

systemctl condrestarthttpd.service

狀態查看

systemctl statushttpd.service

列出可以啟動或停止的服務列表。

systemctl list-unit-files –type=service

設置服務為開機啟動

chkconfig httpd on

systemctl enablehttpd.service

取消服務開機啟動;

systemctl disablehttpd.service

檢查一個服務在當前環境下被配置為啟用還是禁用。

systemctl is-enabledhttpd.service;echo $?

輸出在各個運行級別下服務的啟用和禁用情況

systemctl list-unit-files –type=service

列出某服務在哪些運行級別下啟用和禁用。

ls /etc/lib/systemd/system/*.wants/httpd.service

改變用戶運行級別:

systemctl isolatemulti-user.target

multi-user.target   ==  第3運行級別

graphical.target    ==  第5運行級別

runlevel3.target 符號鏈接,指向multi-user.target

runlevel5.target 符號鏈接,指向graphical.target

改變默認運行級別:

[root@kalaguiyinsystem]# systemctl set-default multi-user.target 

rm'/etc/systemd/system/default.target'

ln -s'/usr/lib/systemd/system/multi-user.target''/etc/systemd/system/default.target'

上述操作的實質是刪除/usr/lib/systemd/system/default.target,然后將目標級別的target文件鏈接至/etc/systemd/system/default.target文件;

systemd 已經不僅僅是一個初始化系統了:

systemd 還負責系統其他的管理配置,比如配置網絡,Locale 管理,管理系統內核模塊加載等。

Systemd 出色地替代了sysvinit 的所有功能,但它并未就此自滿。因為init 進程是系統所有進程的父進程這樣的特殊性,systemd 非常適合提供曾經由其他服務提供的功能,比如定時任務 (以前由 crond 完成) ;會話管理 (以前由 ConsoleKit/PolKit 等管理) 。僅僅從本文皮毛一樣的介紹來看,Systemd已經管得很多了,可它還在不斷發展。它將逐漸成為一個多功能的系統環境,能夠處理非常多的系統管理任務,有人甚至將它看作一個操作系統。這非常有助于標準化 Linux 的管理!

標簽:贛州 阿里 盤錦 安陽 梅州 蚌埠 南通 亳州

巨人網絡通訊聲明:本文標題《CentOS 7下systemd管理的詳解》,本文關鍵詞  CentOS,7下,systemd,管理,的,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《CentOS 7下systemd管理的詳解》相關的同類信息!
  • 本頁收集關于CentOS 7下systemd管理的詳解的相關信息資訊供網民參考!
  • 推薦文章
    主站蜘蛛池模板: 欧美日韩色视频| 日本护士体内精| 91精品国产情侣高潮露脸酒店| 污的网址| pregnanttube临盆| 丝袜美腿国产综合久久| porny九色| 一级a一级a爱片免费兔兔软件丶| 亚洲国产综合第一精品小说| 紫轩小说吧成人系列| 第一次处破女h文| 短篇肉很多的糙汉文n| 一双白丝小脚给我打脚枪| 亚洲午夜精品毛片成人播放器| 国产自在线拍| 把女人弄特爽黄a大片 剧情简介| 国产一级做a爱片久久毛片a| 久久99精品国产.久久久久久久久久久久 | 亚洲一区久久久| 日韩亚洲欧美在线观看| 我解开岳内裤50岁| 欧美大尺度电影是指哪些电影 | 日本一级特黄大片做受9在线观看| 欧美一级特黄特黄做受| 国产精品被???熟女| 男人使劲揉女人奶wwwwww | japanese白嫩人妻HD| 粗壮灌满H男攻男受野外| 好属操| 精品精品国产高清A级毛片| 蹂躏办公室波多野结| 玉蒲团之大乳女教师| 亚洲高清国产品国语在线观看| 男女真实无遮挡xx00动态图软件| 色情乱婬一区二区三区免费∴| 亚洲AV一区二区无码A片| 床上视频app免费| 一级毛片特级毛片国产| 99精品视频在线观看免费播放| 国产男女无套?观看91| 岳与女互换亂倫|