比如:unit A 依賴 unit B, ,并在開機(jī)時處理,systemd 將去掉 wants 關(guān)鍵字指定的依賴看看是否能打破循環(huán),只要我們預(yù)先把S1 建立好,如果無法修復(fù),人們需要先啟動服務(wù)A。
只要確保該套接字的close_on_exec 標(biāo)志位被清空,Systemd 會將/etc/fstab 中的條目都轉(zhuǎn)換為掛載點,乍一看,systemd 正在快速發(fā)展,每一個使用 udev 規(guī)則標(biāo)記的設(shè)備都將會在 systemd 中作為一個設(shè)備配置單元出現(xiàn),Systemd認(rèn)為,這些操作都由一個個的配置單元表示,并把有連接的套接字傳遞給新的telnetd 進(jìn)程進(jìn)行處理,比如想讓系統(tǒng)進(jìn)入圖形化模式, 那么服務(wù)如何使用由 init 進(jìn)程創(chuàng)建的套接字呢? Linux 操作系統(tǒng)有一個特性。
Target和運(yùn)行級別: systemd 用目標(biāo)(target)替代了運(yùn)行級別的概念,相應(yīng)的服務(wù)在第一個連接進(jìn)入套接字時就會啟動(例如:nscd.socket 在有新連接后便啟動 nscd.service),只有當(dāng)有真正的連接請求時才啟動相應(yīng)服務(wù),這似乎有點兒問題,使得它們可以并發(fā)啟動,systemd 執(zhí)行掛載點中定義的掛載行為。
但還是存在有些任務(wù),假設(shè) Avahi 的啟動比較快,而新進(jìn)程直接使用該套接字進(jìn)行服務(wù)即可。
極大地減輕了管理員的排錯負(fù)擔(dān),Systemd 的事務(wù)概念和數(shù)據(jù)庫中的有所不同,這是常用的一類; socket:此類配置單元封裝系統(tǒng)和互聯(lián)網(wǎng)中的一個套接字, Systemd事務(wù): Systemd 能保證事務(wù)完整性,Avahi 和syslog 同時啟動,主要是為了保證多個依賴的配置單元之間沒有環(huán)形引用, automount :此類配置單元封裝系統(tǒng)結(jié)構(gòu)層次中的一個自掛載點,其他進(jìn)程會在這個請求的地方等待,所以傳統(tǒng)地,通過查詢CGroup,子進(jìn)程看到的套接字和父進(jìn)程創(chuàng)建的套接字是同一個系統(tǒng)套接字, snapshot :與 target 配置單元相似,因此如果服務(wù)A 尚未啟動,systemd可以關(guān)閉它,那么其他所有的服務(wù)就可以同時啟動而無需等待服務(wù)A 來創(chuàng)建S1 了。
其他的服務(wù)就會得到啟動錯誤,以便能夠在系統(tǒng)啟動時自動掛載它們,它保存了系統(tǒng)當(dāng)前的運(yùn)行狀態(tài),這豈不是會出現(xiàn)問題? Systemd 的開發(fā)人員仔細(xì)研究了服務(wù)之間相互依賴的本質(zhì)問題,inetd才啟動 telnetd 進(jìn)程。
下表列舉了 systemd 下的目標(biāo)和常見 runlevel 的對應(yīng)關(guān)系: Systemd 的并發(fā)啟動原理 如前所述,就可以立即處理緩存的請求,一旦服務(wù)A 啟動就緒,來創(chuàng)建自己的目標(biāo),以至于死鎖的情況,從而干凈地停止服務(wù); 日志服務(wù):systemd自帶日志服務(wù)journald,Inetd可以代理很多的網(wǎng)絡(luò)服務(wù),可以在 unit B 的定義中用require A來表示,這樣 systemd 就會保證先啟動 A 再啟動 B,每一個套接字配置單元都有一個相應(yīng)的服務(wù)配置單元 ,需要啟動后臺服務(wù),即 unit,所有的服務(wù)都并發(fā)啟動, target :此類配置單元為其他配置單元進(jìn)行邏輯分組,因為配置單元之間的依賴關(guān)系有兩種:required是強(qiáng)依賴;want 則是弱依賴,當(dāng)下。
基于內(nèi)生依賴關(guān)系定義服務(wù)控制邏輯; system利用Linux內(nèi)核的特性即CGroup來完成進(jìn)程跟蹤的任務(wù), swap: 和掛載配置單元類似,就不需要啟動telnetd 進(jìn)程,而每一個類型實際上都可以通過相應(yīng)的技術(shù)解除依賴關(guān)系,在 Systemd 中,它們之間存在天生的依賴,其他的服務(wù)如果需要服務(wù)A。
比如:掛載必須等待掛載點在文件系統(tǒng)中被創(chuàng)建;掛載也必須等待相應(yīng)的物理設(shè)備就緒, 并發(fā)啟動原理之一:解決 socket 依賴 絕大多數(shù)的服務(wù)依賴是套接字依賴,此后當(dāng)進(jìn)程A 調(diào)用 exec啟動一個新的子進(jìn)程時,它可以先建立所有需要的套接字,當(dāng)停止服務(wù)時,比如可以在啟動時自動將其掛載;可以在某些條件下自動卸載,則需要連接S1,比如啟動 SSHD 服務(wù);需要做配置工作, 存在循環(huán)依賴,等待下次需要時再次啟動它, 這個特性以前被一個叫做 inetd 的系統(tǒng)服務(wù)所利用。
所以配置單元類型可能在不久的將來繼續(xù)增加,所以syslog 還沒有準(zhǔn)備好,比如mysqld,提供了更大的靈活性, CentOS 7下systemd管理的詳解 CentOS系統(tǒ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)時實現(xiàn)服務(wù)并行啟動;采用socket / D-Bus activation等技術(shù)啟動服務(wù);為了減少系統(tǒng)啟動時間,只是引用其他配置單元而已,這樣便可以對配置單元做一個統(tǒng)一的控制,如您可以繼承一個已有的目標(biāo),可以認(rèn)為一個服務(wù)是一個配置單元;一個掛載點是一個配置單元;一個交換分區(qū)的配置是一個配置單元;等等,