CentOS系統(tǒng)啟動(dòng)流程:
POST --> Boot Sequence --> Bootloader --> kernel + initramfs(initrd) --> rootfs --> /sbin/init
innit程序:
CentOS 5:SysV init
CetnOS 6: Upstart
CentOS 7 : Systemd
Systemd新特性:
系統(tǒng)Sys V init和LSB init scripts兼容
系統(tǒng)引導(dǎo)時(shí)實(shí)現(xiàn)服務(wù)并行啟動(dòng);采用socket / D-Bus activation等技術(shù)啟動(dòng)服務(wù);為了減少系統(tǒng)啟動(dòng)時(shí)間,systemd的目標(biāo)是:盡可能啟動(dòng)更少的進(jìn)程;盡可能將更多的進(jìn)程并行啟動(dòng);
按需激活進(jìn)程;Systemd可以提供按需啟動(dòng)的能力,只有在某個(gè)服務(wù)被真正請(qǐng)求的時(shí)候才啟動(dòng)它。當(dāng)該服務(wù)結(jié)束,systemd可以關(guān)閉它,等待下次需要時(shí)再次啟動(dòng)它。
能夠?qū)ο到y(tǒng)進(jìn)行快照和恢復(fù);
啟動(dòng)掛載點(diǎn)和自動(dòng)掛載點(diǎn)的管理:
Systemd自助管理系統(tǒng)上的掛載點(diǎn),以便能夠在系統(tǒng)啟動(dòng)時(shí)自動(dòng)掛載它們。且兼容/etc/fstab文件;
實(shí)現(xiàn)事務(wù)依賴關(guān)系管理:
systemd 維護(hù)一個(gè)"事務(wù)一致性"的概念,保證所有相關(guān)的服務(wù)都可以正常啟動(dòng)而不會(huì)出現(xiàn)互相依賴,以至于死鎖的情況。
基于內(nèi)生依賴關(guān)系定義服務(wù)控制邏輯;
system利用Linux內(nèi)核的特性即CGroup來完成進(jìn)程跟蹤的任務(wù)。當(dāng)停止服務(wù)時(shí),通過查詢CGroup,systemd可以確保找到所有的相關(guān)進(jìn)程,從而干凈地停止服務(wù);
日志服務(wù):systemd自帶日志服務(wù)journald,該日志服務(wù)的設(shè)計(jì)初衷是克服現(xiàn)有的syslog服務(wù)的缺點(diǎn)。
System的基本概念
單元的概念:
系統(tǒng)初始化需要做的事情非常多。需要啟動(dòng)后臺(tái)服務(wù),比如啟動(dòng) SSHD 服務(wù);需要做配置工作,比如掛載文件系統(tǒng)。這個(gè)過程中的每一步都被 systemd 抽象為一個(gè)配置單元,即 unit??梢哉J(rèn)為一個(gè)服務(wù)是一個(gè)配置單元;一個(gè)掛載點(diǎn)是一個(gè)配置單元;一個(gè)交換分區(qū)的配置是一個(gè)配置單元;等等。systemd 將配置單元?dú)w納為以下一些不同的類型。然而,systemd 正在快速發(fā)展,新功能不斷增加。所以配置單元類型可能在不久的將來繼續(xù)增加。
service:代表一個(gè)后臺(tái)服務(wù)進(jìn)程,比如mysqld。這是常用的一類;
socket:此類配置單元封裝系統(tǒng)和互聯(lián)網(wǎng)中的一個(gè)套接字。當(dāng)下,systemd支持流式、數(shù)據(jù)包和連續(xù)包的AF_INET、AF_INET6、AF_UNIX socket。每一個(gè)套接字配置單元都有一個(gè)相應(yīng)的服務(wù)配置單元 。相應(yīng)的服務(wù)在第一個(gè)"連接"進(jìn)入套接字時(shí)就會(huì)啟動(dòng)(例如:nscd.socket 在有新連接后便啟動(dòng) nscd.service)。
device :此類配置單元封裝一個(gè)存在于 Linux 設(shè)備樹中的設(shè)備。每一個(gè)使用 udev 規(guī)則標(biāo)記的設(shè)備都將會(huì)在 systemd 中作為一個(gè)設(shè)備配置單元出現(xiàn)。
mount :此類配置單元封裝文件系統(tǒng)結(jié)構(gòu)層次中的一個(gè)掛載點(diǎn)。Systemd 將對(duì)這個(gè)掛載點(diǎn)進(jìn)行監(jiān)控和管理。比如可以在啟動(dòng)時(shí)自動(dòng)將其掛載;可以在某些條件下自動(dòng)卸載。Systemd 會(huì)將/etc/fstab 中的條目都轉(zhuǎn)換為掛載點(diǎn),并在開機(jī)時(shí)處理。
automount :此類配置單元封裝系統(tǒng)結(jié)構(gòu)層次中的一個(gè)自掛載點(diǎn)。每一個(gè)自掛載配置單元對(duì)應(yīng)一個(gè)掛載配置單元 ,當(dāng)該自動(dòng)掛載點(diǎn)被訪問時(shí),systemd 執(zhí)行掛載點(diǎn)中定義的掛載行為。
swap: 和掛載配置單元類似,交換配置單元用來管理交換分區(qū)。用戶可以用交換配置單元來定義系統(tǒng)中的交換分區(qū),可以讓這些交換分區(qū)在啟動(dòng)時(shí)被激活。
target :此類配置單元為其他配置單元進(jìn)行邏輯分組。它們本身實(shí)際上并不做什么,只是引用其他配置單元而已。這樣便可以對(duì)配置單元做一個(gè)統(tǒng)一的控制。這樣就可以實(shí)現(xiàn)大家都已經(jīng)非常熟悉的運(yùn)行級(jí)別概念。比如想讓系統(tǒng)進(jìn)入圖形化模式,需要運(yùn)行許多服務(wù)和配置命令,這些操作都由一個(gè)個(gè)的配置單元表示,將所有這些配置單元組合為一個(gè)目標(biāo)(target),就表示需要將這些配置單元全部執(zhí)行一遍以便進(jìn)入目標(biāo)所代表的系統(tǒng)運(yùn)行狀態(tài)。 (例如:multi-user.target 相當(dāng)于在傳統(tǒng)使用 SysV 的系統(tǒng)中運(yùn)行級(jí)別 3)
timer:定時(shí)器配置單元用來定時(shí)觸發(fā)用戶定義的操作,這類配置單元取代了 atd、crond 等傳統(tǒng)的定時(shí)服務(wù)。
snapshot :與 target 配置單元相似,快照是一組配置單元。它保存了系統(tǒng)當(dāng)前的運(yùn)行狀態(tài)。
依賴關(guān)系:
雖然 systemd 將大量的啟動(dòng)工作解除了依賴,使得它們可以并發(fā)啟動(dòng)。但還是存在有些任務(wù),它們之間存在天生的依賴,不能用"套接字激活"(socket activation)、D-Bus activation 和 autofs 三大方法來解除依賴(三大方法詳情見后續(xù)描述)。比如:掛載必須等待掛載點(diǎn)在文件系統(tǒng)中被創(chuàng)建;掛載也必須等待相應(yīng)的物理設(shè)備就緒。為了解決這類依賴問題,systemd 的配置單元之間可以彼此定義依賴關(guān)系。
Systemd 用配置單元定義文件中的關(guān)鍵字來描述配置單元之間的依賴關(guān)系。比如:unit A 依賴 unit B,可以在 unit B 的定義中用"require A"來表示。這樣 systemd 就會(huì)保證先啟動(dòng) A 再啟動(dòng) B。
Systemd事務(wù):
Systemd 能保證事務(wù)完整性。Systemd 的事務(wù)概念和數(shù)據(jù)庫中的有所不同,主要是為了保證多個(gè)依賴的配置單元之間沒有環(huán)形引用。 存在循環(huán)依賴,那么 systemd 將無法啟動(dòng)任意一個(gè)服務(wù)。此時(shí)systemd 將會(huì)嘗試解決這個(gè)問題,因?yàn)榕渲脝卧g的依賴關(guān)系有兩種:required是強(qiáng)依賴;want 則是弱依賴,systemd 將去掉 wants 關(guān)鍵字指定的依賴看看是否能打破循環(huán)。如果無法修復(fù),systemd會(huì)報(bào)錯(cuò)。
Systemd 能夠自動(dòng)檢測(cè)和修復(fù)這類配置錯(cuò)誤,極大地減輕了管理員的排錯(cuò)負(fù)擔(dān)。
Target和運(yùn)行級(jí)別:
systemd 用目標(biāo)(target)替代了運(yùn)行級(jí)別的概念,提供了更大的靈活性,如您可以繼承一個(gè)已有的目標(biāo),并添加其它服務(wù),來創(chuàng)建自己的目標(biāo)。下表列舉了 systemd 下的目標(biāo)和常見 runlevel 的對(duì)應(yīng)關(guān)系:
Systemd 的并發(fā)啟動(dòng)原理
如前所述,在 Systemd 中,所有的服務(wù)都并發(fā)啟動(dòng),比如Avahi、D-Bus、livirtd、X11、HAL 可以同時(shí)啟動(dòng)。乍一看,這似乎有點(diǎn)兒?jiǎn)栴},比如 Avahi 需要syslog 的服務(wù),Avahi 和syslog 同時(shí)啟動(dòng),假設(shè) Avahi 的啟動(dòng)比較快,所以syslog 還沒有準(zhǔn)備好,可是 Avahi 又需要記錄日志,這豈不是會(huì)出現(xiàn)問題?
Systemd 的開發(fā)人員仔細(xì)研究了服務(wù)之間相互依賴的本質(zhì)問題,發(fā)現(xiàn)所謂依賴可以分為三個(gè)具體的類型,而每一個(gè)類型實(shí)際上都可以通過相應(yīng)的技術(shù)解除依賴關(guān)系。
并發(fā)啟動(dòng)原理之一:解決 socket 依賴
絕大多數(shù)的服務(wù)依賴是套接字依賴。比如服務(wù)A 通過一個(gè)套接字端口S1 提供自己的服務(wù),其他的服務(wù)如果需要服務(wù)A,則需要連接S1。因此如果服務(wù)A 尚未啟動(dòng),S1就不存在,其他的服務(wù)就會(huì)得到啟動(dòng)錯(cuò)誤。所以傳統(tǒng)地,人們需要先啟動(dòng)服務(wù)A,等待它進(jìn)入就緒狀態(tài),再啟動(dòng)其他需要它的服務(wù)。Systemd認(rèn)為,只要我們預(yù)先把S1 建立好,那么其他所有的服務(wù)就可以同時(shí)啟動(dòng)而無需等待服務(wù)A 來創(chuàng)建S1 了。如果服務(wù)A 尚未啟動(dòng),那么其他進(jìn)程向S1 發(fā)送的服務(wù)請(qǐng)求實(shí)際上會(huì)被Linux 操作系統(tǒng)緩存,其他進(jìn)程會(huì)在這個(gè)請(qǐng)求的地方等待。一旦服務(wù)A 啟動(dòng)就緒,就可以立即處理緩存的請(qǐng)求,一切都開始正常運(yùn)行。
那么服務(wù)如何使用由 init 進(jìn)程創(chuàng)建的套接字呢?
Linux 操作系統(tǒng)有一個(gè)特性,當(dāng)進(jìn)程調(diào)用fork 或者exec 創(chuàng)建子進(jìn)程之后,所有在父進(jìn)程中被打開的文件句柄(file descriptor) 都被子進(jìn)程所繼承。套接字也是一種文件句柄,進(jìn)程A 可以創(chuàng)建一個(gè)套接字,此后當(dāng)進(jìn)程A 調(diào)用 exec啟動(dòng)一個(gè)新的子進(jìn)程時(shí),只要確保該套接字的close_on_exec 標(biāo)志位被清空,那么新的子進(jìn)程就可以繼承這個(gè)套接字。子進(jìn)程看到的套接字和父進(jìn)程創(chuàng)建的套接字是同一個(gè)系統(tǒng)套接字,就仿佛這個(gè)套接字是子進(jìn)程自己創(chuàng)建的一樣,沒有任何區(qū)別。
這個(gè)特性以前被一個(gè)叫做 inetd 的系統(tǒng)服務(wù)所利用。Inetd 進(jìn)程會(huì)負(fù)責(zé)監(jiān)控一些常用套接字端口,比如Telnet,當(dāng)該端口有連接請(qǐng)求時(shí),inetd才啟動(dòng) telnetd 進(jìn)程,并把有連接的套接字傳遞給新的telnetd 進(jìn)程進(jìn)行處理。這樣,當(dāng)系統(tǒng)沒有telnet 客戶端連接時(shí),就不需要啟動(dòng)telnetd 進(jìn)程。Inetd可以代理很多的網(wǎng)絡(luò)服務(wù),這樣就可以節(jié)約很多的系統(tǒng)負(fù)載和內(nèi)存資源,只有當(dāng)有真正的連接請(qǐng)求時(shí)才啟動(dòng)相應(yīng)服務(wù),并把套接字傳遞給相應(yīng)的服務(wù)進(jìn)程。
和 inetd 類似,systemd 是所有其他進(jìn)程的父進(jìn)程,它可以先建立所有需要的套接字,然后在調(diào)用exec 的時(shí)候?qū)⒃撎捉幼謧鬟f給新的服務(wù)進(jìn)程,而新進(jìn)程直接使用該套接字進(jìn)行服務(wù)即可。
并發(fā)啟動(dòng)原理之二:解決 D-Bus 依賴
D-Bus 是 desktop-bus 的簡(jiǎn)稱,是一個(gè)低延遲、低開銷、高可用性的進(jìn)程間通信機(jī)制。它越來越多地用于應(yīng)用程序之間通信,也用于應(yīng)用程序和操作系統(tǒng)內(nèi)核之間的通信。很多現(xiàn)代的服務(wù)進(jìn)程都使用D-Bus取代套接字作為進(jìn)程間通信機(jī)制,對(duì)外提供服務(wù)。比如簡(jiǎn)化Linux 網(wǎng)絡(luò)配置的NetworkManager 服務(wù)就使用D-Bus 和其他的應(yīng)用程序或者服務(wù)進(jìn)行交互:郵件客戶端軟件evolution 可以通過D-Bus 從NetworkManager 服務(wù)獲取網(wǎng)絡(luò)狀態(tài)的改變,以便做出相應(yīng)的處理。
D-Bus 支持所謂"busactivation"功能。如果服務(wù)A 需要使用服務(wù) B 的 D-Bus 服務(wù),而服務(wù) B 并沒有運(yùn)行,則 D-Bus 可以在服務(wù) A 請(qǐng)求服務(wù) B 的 D-Bus 時(shí)自動(dòng)啟動(dòng)服務(wù) B。而服務(wù) A 發(fā)出的請(qǐng)求會(huì)被 D-Bus 緩存,服務(wù) A 會(huì)等待服務(wù) B 啟動(dòng)就緒。利用這個(gè)特性,依賴D-Bus 的服務(wù)就可以實(shí)現(xiàn)并行啟動(dòng)。
并發(fā)啟動(dòng)原理之三:解決文件系統(tǒng)依賴
系統(tǒng)啟動(dòng)過程中,文件系統(tǒng)相關(guān)的活動(dòng)是最耗時(shí)的,比如掛載文件系統(tǒng),對(duì)文件系統(tǒng)進(jìn)行磁盤檢查(fsck),磁盤配額檢查等都是非常耗時(shí)的操作。在等待這些工作完成的同時(shí),系統(tǒng)處于空閑狀態(tài)。那些想使用文件系統(tǒng)的服務(wù)似乎必須等待文件系統(tǒng)初始化完成才可以啟動(dòng)。但是systemd 發(fā)現(xiàn)這種依賴也是可以避免的。
Systemd 參考了 autofs 的設(shè)計(jì)思路,使得依賴文件系統(tǒng)的服務(wù)和文件系統(tǒng)本身初始化兩者可以并發(fā)工作。autofs可以監(jiān)測(cè)到某個(gè)文件系統(tǒng)掛載點(diǎn)真正被訪問到的時(shí)候才觸發(fā)掛載操作,這是通過內(nèi)核automounter 模塊的支持而實(shí)現(xiàn)的。比如一個(gè)open()系統(tǒng)調(diào)用作用在"/misc/cd/file1"的時(shí)候,/misc/cd 尚未執(zhí)行掛載操作,此時(shí) open()調(diào)用被掛起等待,Linux 內(nèi)核通知 autofs,autofs 執(zhí)行掛載。這時(shí)候,控制權(quán)返回給open()系統(tǒng)調(diào)用,并正常打開文件。
Systemd 集成了 autofs 的實(shí)現(xiàn),對(duì)于系統(tǒng)中的掛載點(diǎn),比如/home,當(dāng)系統(tǒng)啟動(dòng)的時(shí)候,systemd 為其創(chuàng)建一個(gè)臨時(shí)的自動(dòng)掛載點(diǎn)。在這個(gè)時(shí)刻/home真正的掛載設(shè)備尚未啟動(dòng)好,真正的掛載操作還沒有執(zhí)行,文件系統(tǒng)檢測(cè)也還沒有完成??墒悄切┮蕾囋撃夸浀倪M(jìn)程已經(jīng)可以并發(fā)啟動(dòng),他們的open()操作被內(nèi)建在systemd 中的autofs 捕獲,將該open()調(diào)用掛起(可中斷睡眠狀態(tài))。然后等待真正的掛載操作完成,文件系統(tǒng)檢測(cè)也完成后,systemd將該自動(dòng)掛載點(diǎn)替換為真正的掛載點(diǎn),并讓open()調(diào)用返回。由此,實(shí)現(xiàn)了那些依賴于文件系統(tǒng)的服務(wù)和文件系統(tǒng)本身同時(shí)并發(fā)啟動(dòng)。
當(dāng)然對(duì)于"/"根目錄的依賴實(shí)際上一定還是要串行執(zhí)行,因?yàn)閟ystemd 自己也存放在/之下,必須等待系統(tǒng)根目錄掛載檢查好。
不過對(duì)于類似/home 等掛載點(diǎn),這種并發(fā)可以提高系統(tǒng)的啟動(dòng)速度,尤其是當(dāng)/home是遠(yuǎn)程的 NFS 節(jié)點(diǎn),或者是加密盤等,需要耗費(fèi)較長(zhǎng)的時(shí)間才可以準(zhǔn)備就緒的情況下,因?yàn)椴l(fā)啟動(dòng),這段時(shí)間內(nèi),系統(tǒng)并不是完全無事可做,而是可以利用這段空余時(shí)間做更多的啟動(dòng)進(jìn)程的事情,總的來說就縮短了系統(tǒng)啟動(dòng)時(shí)間。
Systemd 的使用
下面針對(duì)技術(shù)人員的不同角色來簡(jiǎn)單地介紹一下 systemd 的使用。本文只打算給出簡(jiǎn)單的描述,讓您對(duì) systemd 的使用有一個(gè)大概的理解。具體的細(xì)節(jié)內(nèi)容太多,即無法在一篇短文內(nèi)寫全。還需要讀者自己去進(jìn)一步查閱 systemd的文檔。
Unit 文件的編寫
開發(fā)人員開發(fā)了一個(gè)新的服務(wù)程序,比如httpd,就需要為其編寫一個(gè)配置單元文件以便該服務(wù)可以被systemd 管理,類似UpStart 的工作配置文件。在該文件中定義服務(wù)啟動(dòng)的命令行語法,以及和其他服務(wù)的依賴關(guān)系等。
此外我們之前已經(jīng)了解到,systemd 的功能繁多,不僅用來管理服務(wù),還可以管理掛載點(diǎn),定義定時(shí)任務(wù)等。這些工作都是由編輯相應(yīng)的配置單元文件完成的。我在這里給出幾個(gè)配置單元文件的例子。
下面是 SSH 服務(wù)的配置單元文件,服務(wù)配置單元文件以.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定義啟動(dòng)服務(wù)之前應(yīng)該運(yùn)行的命令;
#ExecStart 定義啟動(dòng)服務(wù)的具體命令行語法。
[Install]
WantedBy=multi-user.target
#[install]部分:WangtedBy表明這個(gè)服務(wù)是在多用戶模式下所需要的。
那我們就來看下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 啟動(dòng)的時(shí)候 basic.target 也必須被啟動(dòng);另外 basic.target 停止的時(shí)# 候,multi-user.target 也必須停止。如果您接著查看 basic.target 文件,會(huì)發(fā)現(xiàn)它又指定了 sysinit.target
# 其他的單元必須隨之啟動(dòng)。同樣 sysinit.target 也會(huì)包含其他的單元。采用這樣的層層鏈接的結(jié)構(gòu),最終所# 有需要支持多用戶模式的組件服務(wù)都會(huì)被初始化啟動(dòng)好。
[Install]
Alias=default.target
# Alias 定義,即定義本單元的別名,這樣在運(yùn)行 systemctl 的時(shí)候就可以使用這個(gè)別名來引用本單元。
此外在/etc/systemd/system 目錄下還可以看到諸如*.wants 的目錄,放在該目錄下的配置單元文件等同于在[Unit]小節(jié)中的 wants 關(guān)鍵字,即本單元啟動(dòng)時(shí),還需要啟動(dòng)這些單元。比如您可以簡(jiǎn)單地把您自己寫的 foo.service 文件放入 multi-user.target.wants 目錄下,這樣每次都會(huì)被默認(rèn)啟動(dòng)了。
[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文件,這個(gè)文件定義了一個(gè)文件掛載點(diǎn):
[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
這個(gè)配置單元文件定義了一個(gè)掛載點(diǎn)。掛載配置單元文件有一個(gè)[Mount]配置小節(jié),里面配置了 What,Where 和Type 三個(gè)數(shù)據(jù)項(xiàng)。這都是掛載命令所必須的,例子中的配置等同于下面這個(gè)掛載命令:
mount –t debugfs /sys/kernel/debug debugfs
Systemd系統(tǒng)管理:
systemd 的主要命令行工具是 systemctl。
多數(shù)管理員應(yīng)該都已經(jīng)非常熟悉系統(tǒng)服務(wù)和 init 系統(tǒng)的管理,比如 service、chkconfig以及 telinit 命令的使用。systemd 也完成同樣的管理任務(wù),只是命令工具systemctl 的語法有所不同而已。
啟動(dòng)服務(wù)
systemctl start httpd.service 如圖1:
停止服務(wù)
systemctl stop httpd.service 如圖2:
重啟服務(wù)
systemctl restarthttpd.service 如圖3:
重載服務(wù)
systemctl reloadhttpd.service
條件式重啟
systemctl condrestarthttpd.service
狀態(tài)查看
systemctl statushttpd.service
列出可以啟動(dòng)或停止的服務(wù)列表。
systemctl list-unit-files –type=service
設(shè)置服務(wù)為開機(jī)啟動(dòng)
chkconfig httpd on
systemctl enablehttpd.service
取消服務(wù)開機(jī)啟動(dòng);
systemctl disablehttpd.service
檢查一個(gè)服務(wù)在當(dāng)前環(huán)境下被配置為啟用還是禁用。
systemctl is-enabledhttpd.service;echo $?
輸出在各個(gè)運(yùn)行級(jí)別下服務(wù)的啟用和禁用情況
systemctl list-unit-files –type=service
列出某服務(wù)在哪些運(yùn)行級(jí)別下啟用和禁用。
ls /etc/lib/systemd/system/*.wants/httpd.service
改變用戶運(yùn)行級(jí)別:
systemctl isolatemulti-user.target
multi-user.target == 第3運(yùn)行級(jí)別
graphical.target == 第5運(yùn)行級(jí)別
runlevel3.target 符號(hào)鏈接,指向multi-user.target
runlevel5.target 符號(hào)鏈接,指向graphical.target
改變默認(rèn)運(yùn)行級(jí)別:
[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'
上述操作的實(shí)質(zhì)是刪除/usr/lib/systemd/system/default.target,然后將目標(biāo)級(jí)別的target文件鏈接至/etc/systemd/system/default.target文件;
systemd 已經(jīng)不僅僅是一個(gè)初始化系統(tǒng)了:
systemd 還負(fù)責(zé)系統(tǒng)其他的管理配置,比如配置網(wǎng)絡(luò),Locale 管理,管理系統(tǒng)內(nèi)核模塊加載等。
Systemd 出色地替代了sysvinit 的所有功能,但它并未就此自滿。因?yàn)閕nit 進(jìn)程是系統(tǒng)所有進(jìn)程的父進(jìn)程這樣的特殊性,systemd 非常適合提供曾經(jīng)由其他服務(wù)提供的功能,比如定時(shí)任務(wù) (以前由 crond 完成) ;會(huì)話管理 (以前由 ConsoleKit/PolKit 等管理) 。僅僅從本文皮毛一樣的介紹來看,Systemd已經(jīng)管得很多了,可它還在不斷發(fā)展。它將逐漸成為一個(gè)多功能的系統(tǒng)環(huán)境,能夠處理非常多的系統(tǒng)管理任務(wù),有人甚至將它看作一個(gè)操作系統(tǒng)。這非常有助于標(biāo)準(zhǔn)化 Linux 的管理!