深入淺析centos7中的systemd
更新時間:2018年02月16日 10:39:43 作者:shenxm
這篇文章主要介紹了centos7中的systemd 的相關資料,需要的朋友可以參考下
系統(tǒng)啟動流程
POST --> Boot Sequence --> Bootloader --> kernel+initramfs(initrd) --> rootfs --> /sbin/init init: CentOS 5: SysV init CentOS 6: Upstart CentOS 7: Systemd
systemd
系統(tǒng)啟動和服務器守護進程管理器,負責在系統(tǒng)啟動或運行時,激活系統(tǒng)資源,服務器進程和其它進程。 新特性: 系統(tǒng)引導時實現(xiàn)服務并行啟動 按需啟動守護進程 自動化的服務依賴關系管理 同時采用socket式與D-Bus總線式激活服務 系統(tǒng)狀態(tài)快照 核心概念:unit unit 表示不同類型的systemd對象,通過配置文件進行標識和配置。 文件中主要包含了系統(tǒng)服務、監(jiān)聽socket 、保存的系統(tǒng)快照以及其它與init 相關的信息。 配置文件: /usr/lib/systemd/system: 每個服務最主要的啟動腳本設置,類似于之前的/etc/init.d/ /run/systemd/system: 系統(tǒng)執(zhí)行過程中所產生的服務腳本,比/usr/lib/systemd/system目錄優(yōu)先運行 /etc/systemd/system: 管理員建立的執(zhí)行腳本,類似于/etc/rc.d/rcN.d/Sxx 類的功能,比/run/systemd/system目錄優(yōu)先運行 關鍵特性: 基于socket 的激活機制: socket 與服務程序分離 基于d-bus 的激活機制: 基于device 的激活機制: 基于path 的激活機制: 系統(tǒng)快照: 保存各unit的當前狀態(tài)信息于持久存儲設備中,向后兼容sysv init 腳本 不兼容: systemctl 命令固定不變,不可擴展 非由systemd 啟動的服務,systemctl無法與之通信和控制
Unit 類型
Systemctl –t help 查看unit 類型 Service unit: 文件擴展名為.service, 用于定義系統(tǒng)服務 Target unit: 文件擴展名為.target,用于模擬實現(xiàn)運行級別 Device unit: .device,用于定義內核識別的設備 Mount unit: .mount, 定義文件系統(tǒng)掛載點 Socket unit: .socket, 用于標識進程間通信用的socket文件,也可在系統(tǒng)啟動時,延遲啟動服務,實現(xiàn)按需啟動 Snapshot unit: .snapshot, 管理系統(tǒng)快照 Swap unit: .swap, 用于標識swap 設備 Automount unit: .automount ,文件系統(tǒng)的自動掛載點 Path unit: .path,用于定義文件系統(tǒng)中的一個文件或目錄使用,常用于當文件系統(tǒng)變化時,延遲激活服務,如:spool 目錄
服務管理
`centos7幾乎一切服務都是由systemctl來管理service unit,centos7之前的service同時仍然兼容。
運行級別
target units: unit 配置文件: .target,用于模擬實現(xiàn)運行級別 ls /usr/lib/systemd/system/*.target systemctl list-unit-files --type target --all 運行級別: 0 ==> runlevel0.target, poweroff.target 1 ==> runlevel1.target, rescue.target 2 ==> runlevel2.target, multi-user.target 3 ==> runlevel3.target, multi-user.target 4 ==> runlevel4.target, multi-user.target 5 ==> runlevel5.target, graphical.target 6 ==> runlevel6.target, reboot.target 查看依賴性: systemctl list-dependencies graphical.target 級別切換: init N ==> systemctl isolate name.target systemctl isolate multi-user.target 注意:只有/lib/systemd/system/*.target 文件中AllowIsolate=yes才能切換,修改文件需執(zhí)行systemctl daemon-reload 才能生效 查看target: systemctl list-units --type target 獲取默認運行級別: /etc/inittab ==> systemctl get-default runlevel who -r 修改默認級別: /etc/inittab ==> systemctl set-default name.target systemctl set-default multi-user.target ls –l /etc/systemd/system/default.target 切換至緊急救援模式: 相當于init 1 systemctl rescue 切換至emergency 模式: systemctl emergency 其它常用命令: 傳統(tǒng)命令init ,poweroff ,halt ,reboot 都成為 systemctl 的軟鏈接 關機:systemctl halt 、systemctl poweroff 重啟:systemctl reboot 掛起:systemctl suspend 休眠: :systemctl hibernate 休眠并掛起:systemctl hybrid-sleep
CentOS7 引導啟動順序
UEFi 或BIOS 初始化,運行POST 開機自檢 選擇啟動設備 引導裝載程序, centos7 是grub2 加載裝載程序的配置文件:/etc/grub.d/ ,/etc/default/grub ,/boot/grub2/grub.cfg 加載initramfs 驅動模塊 加載內核選項 內核初始化,centos7 使用systemd 代替init 執(zhí)行initrd.target 所有單元,包括掛載/etc/fstab 從initramfs 根文件系統(tǒng)切換到磁盤根目錄 systemd執(zhí)行/etc/systemd/system目錄下的配置 systemd 執(zhí)行默認target 配置,配置文件/etc/systemd/system/default.target systemd 執(zhí)行sysinit.target 初始化系統(tǒng)及basic.target 準備操作系統(tǒng) systemd 啟動multi-user.target 下的本機與服務器服務 systemd 執(zhí)行multi-user.target 下的/etc/rc.d/rc.local systemd 執(zhí)行multi-user.target 下的getty.target及登錄服務 systemd 執(zhí)行graphical 需要的服務
service unit 文件格式
/etc/systemd/system : 系統(tǒng)管理員和用戶使用 /usr/lib/systemd/system : 發(fā)行版打包者使用 相關布爾值 1 、yes 、on 、true 都是開啟 0 、no 、off、false 都是關閉 時間單位 默認是秒,所以要用毫秒(ms )分鐘(m )等須顯式說明 service unit file 文件通常由三部分組成: [Unit] : 定義與Unit 類型無關的通用選項;用于提供unit 的描述信息、unit 行為及依賴關系等 [Service] : 與特定類型相關的專用選項;此處為Service 類型 [Install] : 定義由“systemctl enable” 以及"systemctl disable“ 命令在實現(xiàn)服務啟用或禁用時用到的一些選項 Unit 段的常用選項: Description : 描述信息 After : 定義unit 的啟動次序,表示當前unit 應該晚于哪些unit 啟動,其功能與Before 相反 Requires : 依賴到的其它units ,強依賴,被依賴的units 無法激活時,當前unit 也無法激活 Wants : 依賴到的其它units ,弱依賴 Conflicts : 定義units 間的沖突關系 Service 段的常用選項: Type : 定義影響ExecStart 及相關參數(shù)的功能的unit 進程啟動類型 simple : 默認值,這個daemon(后臺進程)主要由ExecStart所接的指令串來啟動,啟動后常駐于內存中 forking : 由ExecStart 啟動的程序透過spawns(繁衍)延伸出其他子程序來作為此daemon的主要服務。原生父程序在啟動結束后就會終止 oneshot : 與simple類似,不過這個程序在工作完畢后就結束了,不會常駐在內存中 dbus : 與simple類似,但這個daemon必須要在取得一個D-Bus的名稱后,才會繼續(xù)運作. 因此通常也要同時設定BusNname= 才行 notify : 在啟動完成后會發(fā)送一個通知消息。還需要配合NotifyAccess來讓 Systemd 接收消息 idle : 與simple類似,要執(zhí)行這個daemon必須要所有的工作都順利執(zhí)行完畢后才會執(zhí)行。這類的daemon通常是開機到最后才執(zhí)行即可的服務 EnvironmentFile : 環(huán)境配置文件 ExecStart : 指明啟動unit要運行命令或腳本的絕對路徑 ExecStartPre: ExecStart前運行 ExecStartPost: ExecStart后運行 ExecStop : 指明停止unit要運行的命令或腳本 Restart : 當設定Restart=1時,則當次daemon服務意外終止后,會再次自動啟動此服務 Install 段的常用選項: Alias : 別名,可使用systemctl command Alias.service RequiredBy : 被哪些units所依賴,強依賴 WantedBy : 被哪些units所依賴,弱依賴 Also : 安裝本服務的時候還要安裝別的相關服務 注意: 對于新創(chuàng)建的unit文件,或者修改了的unit文件,要通知systemd 重載此配置文件, 可以選擇重啟 systemctl daemon-reload 示例: vim /etc/systemd/system/bak.service [Unit] Description=backup /etc Requires=atd.service [Service] Type=simple ExecStart=/bin/bash -c "echo /testdir/bak.sh|at now" [Install] WantedBy=multi-user.target systemctl daemon-reload systemctl start bak
設置內核參數(shù)
只影響當次啟動 啟動時,在linux16 行后添加 systemd.unit=desired.target systemd.unit=emergency.target systemd.unit=recure.target recure.target比emergency支持更多的功能,例如日志等
啟動排錯
文件系統(tǒng)損壞,先嘗試自動修復,失敗則進入emergency shell,提示用戶修復 在/etc/fstab 不存在對應的設備和UUID等一段時間,如不可用,進入emergency shell 在/etc/fstab 不存在對應掛載點systemd嘗試創(chuàng)建掛載點,否則提示進入emergency shell. 在/etc/fstab 不正確的掛載選項提示進入emergency shell
破解CentOS7 的root 口令
方法一 啟動時任意鍵暫停啟動 按e 鍵進入編輯模式 將光標移動linux16 開始的行,添加內核參數(shù)rd.break 按ctrl-x 啟動 mount –o remount,rw /sysroot chroot /sysroot passwd root touch /.autorelabel exit reboot 方法二 啟動時任意鍵暫停啟動 按e 鍵進入編輯模式 將光標移動linux16 開始的行,改為rw init=/sysroot/bin/sh 按ctrl-x 啟動 chroot /sysroot passwd root touch /.autorelabel exit reboot
修復GRUB2
GRUB “the Grand Unified Bootloader” ” 引導提示時可以使用命令行界面 可從文件系統(tǒng)引導 主要配置文件 /boot/grub2/grub.cfg 修復配置文件 grub2-mkconfig > /boot/grub2/grub.cfg grub2-mkconfig -o /boot/grub2/grub.cfg 修復grub grub2-install /dev/sda (BIOS 環(huán)境) grub2-install (UEFI 環(huán)境) 調整默認啟動內核 vim /etc/default/grub GRUB_DEFAULT=0
總結
以上所述是小編給大家介紹的centos7中的systemd,希望對大家有所幫助,如果大家有任何疑問歡迎給我留言,小編會及時回復大家的!
相關文章
如何實現(xiàn)Linux操作系統(tǒng)的自動登錄
如何實現(xiàn)Linux操作系統(tǒng)的自動登錄...2006-10-10