http://www.aichengxu.com/linux/11318300.htm
這篇著重講解下Syetemd的相關知識,systemd可以說是centos7上的重大改革,功能之強大媲美一個操作系統(tǒng),那下面就從以下幾點來進行講解:
CentOS7啟動
Unit介紹
服務管理和查看
啟動排錯
破解口令
修復grub2
post-->BISO-->bootloader(MBR)-->kernel(ramdisk)-->rootfs-->/sbin/initinit程序:
不同系統(tǒng)上的init程序版本centos5:Sysv lnitcentos6:Upstartcentos7:systemd 系統(tǒng)守護進程systemd介紹
Systemd:系統(tǒng)啟動和服務器守護進程管理器,負責在系統(tǒng)啟動或運行時,激活系統(tǒng)資源,服務器進程和其它進程systemd的新特性:
系統(tǒng)引導時實現(xiàn)服務并行啟動;實現(xiàn)快速開機按需啟動守護進程:能自動保存系統(tǒng)狀態(tài)快照:基于依賴關系定義服務控制邏輯:(自動化的服務依賴關系管理)同時采用socket式與D-Bus總線式激活服務systemd核心概念:
unit(單元): unit表示不同類型的systemd對象 unit由其相關的配置文件進行標識,識別和配置. 相關文件中主要包含了系統(tǒng)服務,監(jiān)聽的socket,保存的快照以及其他與init相關的信息; 這些配置文件主要保存在 /usr/lib/systemd/system:每個服務最主要的啟動腳本設置,類似于之前的/etc/init.d/ /run/systemd/system:系統(tǒng)執(zhí)行過程中所產(chǎn)生的服務腳本,比上面目錄優(yōu)先運行 /etc/systemd/system:管理員建立的執(zhí)行腳本,類似于/etc/rc.d/rcN.d/Sxx類的功能,比上面目錄優(yōu)先運行unit的常見類別:Service unit:文件擴展名為.service,用于定義系統(tǒng)服務,類似服務腳本 Target unit:文件擴展為.target,用于模擬實現(xiàn)"運行級別";與/etc/inittab不一樣,只是為了對應老版本的系統(tǒng) Device unit:.device,用于定義內(nèi)核識別的設備;centos6下,/dev目錄下的設備文件是由udev根據(jù)/sys/目錄下由內(nèi)核探測輸出的信息而創(chuàng)建的,對centos7來說,/dev目錄下是由systemd和udev聯(lián)合創(chuàng)建的,主要由systemd完成.systemd識別硬件,主要靠*.device文件. Mount unit:.mount,用于定義文件系統(tǒng)掛載點;kernel 3.0版本后的系統(tǒng),大都是用cgroup(k控制組)來實現(xiàn)資源分配.mount后看到大量的cgroup信息,cgroup實現(xiàn)對資源分配的一種內(nèi)核中的資源分配的機制.systemd負責對cgroup的激活,實現(xiàn)資源分配. Socket unit:.socket,用于標識進程間通信用到的socket文件.任何主機監(jiān)聽在一個套接字上,任何進程監(jiān)聽在一個套接字上,或者任何進程打開一個隨機端口去與別的服務器的進程進行通道,都要創(chuàng)建socket文件.現(xiàn)在這些創(chuàng)建等功能是有systemd負責管理實現(xiàn)的 Snapshot unit:.snapshot,管理系統(tǒng)快照 Swap unit:.swap,用于表示swap設備 Autommount unit:.autommount,文件系統(tǒng)自動掛載點設備 Path unit:.path,用于定于文件系統(tǒng)中的一文件或目錄使用,常用于當文件系統(tǒng)發(fā)生變化時,延遲激活服務,如: spool 目錄關鍵特性: 基于socket的激活機制,socket與程序分離; 基于D-bus(總線)的激活機制;如果總線上有對某一個服務的訪問,那么就基于總線的請求,將某一設備激活 基于device的激活機制;當某個設備插入,能自動激活mount unit和deviceunit或autommount unit,能監(jiān)控當前系統(tǒng)和內(nèi)核所輸出的硬件信息,一旦發(fā)現(xiàn)某個硬件出現(xiàn),先創(chuàng)建設備文件,在自動掛載至某掛載點;掛載點不存在,還能自動創(chuàng)建. 基于Path的激活機制;系統(tǒng)能夠監(jiān)控某個目錄或文件的存在,來激活一個服務或進程;比如說,某個進程崩潰時創(chuàng)建一個鎖文件,系統(tǒng)會根據(jù)判斷鎖文件的存在,去啟動另一個進程來判斷,崩潰進程的原因; 系統(tǒng)快照:保存各unit的當前狀態(tài)信息于持久存儲設備中; 向后兼容sysv lnit腳本:/etc/init.d/下的服務腳本不兼容: systemctl的命令是固定不變的; 非由systemd啟動的服務,systemctl無法與之通信,控制服務;管理系統(tǒng)服務:
centos7:service類型的unit文件;所有命令要靠systemctl控制;注意:能兼容早期的服務腳本systemctl命令: 名稱:Control the systemd system and service manager 格式: systemctl [OPTIONS...] COMMAND NAME[.service] 命令示例 啟動服務:service NAME start --> systemctl start NAME.service 停止服務:service NAME stop --> systemctl stop NAME.service 重啟服務:service NAME restart --> systemctl restart NAME.service 查看狀態(tài):service NAME status --> systemctl status NAME.service 條件式重啟服務:service NAME condrestart--> systemctl try-restart-NAME.service 重載或重啟服務:systemctl reload-or-restart NAME.service 重載或條件式重啟:systemctl reload-or-try-restart NAME.service 查看某服務當前激活與否的狀態(tài):systemctl is-active NAME.service 查看所有已激活的服務:systemctl list-units -t service 查看所有服務(激活和未激活):chkconfig --list-->systemctl list-units -t service -a 查看所有服務的開機自啟狀態(tài): chkconfig --list ==> systemctl list-unit-files --type service 設置服務開機自啟:chkconfig NAME on --> systemctl enable NAME.service 禁止服務開機自啟:chkconfig NAME off --> systemctl disable NAME.service 查看某服務是否能開機自啟:chkconfig --list NAME --> systemctl is-enabled NAME.service 禁止某服務設定為開機自啟或手動啟動:systemctl mask NAME.service 取消禁止某服務設定為開機自啟或手動啟動:systemctl unmask NAME.service 查看服務的依賴關系:systemctl list-dependencies NAME.service 用來列出該服務在哪些運行級別下啟用和禁用:chkconfig sshd –list ==>ls /etc/systemd/system/*.wants/sshd.service 殺掉進程:systemctl kill 進程名服務狀態(tài): systemctl list-units --type service --all顯示狀態(tài) loaded:Unit配置文件已處理 active(running):一次或多次持續(xù)處理的運行 active(exited):成功完成一次性的配置 active(waiting):運行中,等待一個事件 inactive:不運行 enabled:開機啟動 disabled:開機不啟動 static:開機不啟動,但可被另一個啟用的服務激活systemctl命令示例: 顯示所有單元狀態(tài) systemctl 或 systemctl list-units 只顯示服務單元的狀態(tài) systemctl --type=service 顯示sshd服務單元 systemctl status sshd.service –l 驗證sshd服務當前是否活動 systemctl is-active sshd 啟動,停止和重啟sshd服務 systemctl start sshd.service systemctl stop sshd.service systemctl restart sshd.service 重新加載配置 systemctl reload sshd.service 列出活動狀態(tài)的所有服務單元 systemctl list-units --type=service 列出所有服務單元 systemctl list-units --type=service --all 查看服務單元的啟用和禁用狀態(tài)。 systemctl list-unit-files --type=service 列出失敗的服務 systemctl --failed --type=service 列出依賴的單元 systemctl list-dependencies sshd 驗證sshd服務是否開機啟動 systemctl is-enabled sshd 禁用network,使之不能自動啟動,但手動可以 systemclt disable network 啟用network systemctl enable network 禁用network,使之不能手動或自動啟動 systemclt mask network 啟用network systemctl umask network管理target units: unit配置文件: .target 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 NAME.target 級別切換: centos6: init N centos7: systemctl isolate NAME.target 注: 只有/lib/systemd/system/*.target文件中AllowIsolate=yes 才能切換(修改文件需執(zhí)行systemctl daemonreload才能生效) 查看級別: centos6:runlevel 或者 who -r centos7:systemctl list-units -t target 查看所有級別:systemctl list-units -t target -a 獲取默認運行級別:sytemctl get-default 修改默認運行級別: systemctl set-default NAME.target ls –l /etc/systemd/system/default.target 切換至緊急救援(級別1)模式:systemctl rescue 切換至emergency(緊急)模式:各種驅(qū)動不會被加載,各種系統(tǒng)初始化功能不會被加載.是真正的實現(xiàn)系統(tǒng)救援的模式:因驅(qū)動不兼容導致系統(tǒng)崩潰,適合切換此模式救援. systemctl emergency 其他常用命令: 關機:systemctl halt,systemctl poweroff 重啟:systemctl reboot 掛起:systemctl suspend 快照:systemctl hlbernate 快照并掛起:systemctl hybrid-sleep 修改運行級別就是修改/etc/systemd/system/default.target的連接文件centos 7 引導順序
UEFi或BIOS初始化,運行POST開機自檢選擇啟動設備引導裝載程序, centos7是grub2加載裝載程序的配置文件: /etc/grub.d/ /etc/default/grub /boot/grub2/grub.cfg加載initramfs驅(qū)動模塊加載內(nèi)核選項內(nèi)核初始化, centos7使用systemd代替init執(zhí)行initrd.target所有單元,包括掛載/etc/fstab從initramfs根文件系統(tǒng)切換到磁盤根目錄systemd執(zhí)行默認target配置,配置文件 /etc/systemd/default.target /etc/systemd/system/systemd執(zhí)行sysinit.target初始化系統(tǒng)及basic.target準備操作系統(tǒng)systemd啟動multi-user.target下的本機與服務器服務systemd執(zhí)行multi-user.target下的/etc/rc.d/rc.localSystemd執(zhí)行multi-user.target下的getty.target及登入服務systemd執(zhí)行graphical需要的服務service target file:
/etc/systemd/system:系統(tǒng)管理員和用戶使用/usr/lib/systemd/system:發(fā)行版打包者使用以 “ #” 開頭的行后面的內(nèi)容會被認為是注釋相關布爾值, 1、 yes、 on、 true 都是開啟, 0、 no、 off、false 都是關閉。時間單位默認是秒,所以要用毫秒( ms)分鐘( m)等請顯式說明文件通常有三部分組成: [Unit]:定義與Unit類型無關的通用選項;用于提供unit的描述信息,unit行為及依賴關系 Description:意義性描述信息 "systemctl status NAME"命令 可顯示 After:定義unit的啟動次序;表示當前unit應該晚與那些unit啟動; Requles:定義依賴到的其他unit;強依賴關系,只有依賴的unit啟動,此unit才能啟動;任何依賴unit啟動不了,當前unit就無法激活 Wants:定義依賴到的其他unit;弱依賴關系;被依賴的unit對本身的啟動影響不大. Conflicts:定義unit間的沖突關系 Documentation=man:httpd(8) 文檔的路徑 Documentation=man:apachectl(8) [Service]:定義與特定類型相關的專用選項;此處為Service類型 Type=notify 用來定義影響execstart及相關參數(shù)的功能的unit進程啟動類型 類型: simple:默認值,表示由execstart啟動的進程是主進程 forking: 表示由execstart指明的程序所啟動的進程生成的一個子進程為主進程,啟動完成后,父進程會退出; oneshot:類似于simple,在啟動后續(xù)的unit前,父進程會退出;一次性的 dbus:類似于simple,后續(xù)的unit僅在主進程得到dbus之后,才能啟動; notify:類似于simple,表示后續(xù)的unit僅在通過sdbotify函數(shù)發(fā)送通知以后,然后才能運行這個命令 ldle:與simple類似,要執(zhí)行這個daemon必須要所有的工作都順利執(zhí)行完畢后才會執(zhí)行。這類的daemon通常是開機到最后才執(zhí)行即可的服務 EnvironmentFile=/etc/sysconfig/httpd 指定啟動unit時要用到的環(huán)境配置文件,從這個文件中調(diào)用變量 ExecStart=指明啟動unit要t運行的命令或腳本 ExecReload:指明重新加載unit要運行的命令或腳本 ExecStop: 指明停止unit要運行的命令或腳本 Restart:當設定Restart=1 時,則當次daemon服務意外終止后,會再次自動啟動此服務 [Install]:定義由"systemctl enable"以及"systemctl disable"命令在實現(xiàn)服務啟動或禁用時用到的一些選項 Alias:當前unit的別名 RequiredBy:被那些units所依賴;依賴于當前unit的unit列表;強依賴 WantedBy:被那些units所依賴;弱依賴 Also:安裝本服務的時候還要安裝別的相關服務 注意:對于新創(chuàng)建的unit文件或修改了的init文件,要通知systemd重載次配置文件. #systemctl daemon-reload #systemctl restart NAME.service 練習:為當前系統(tǒng)的httpd服務提供一個unit文件; #vim /etc/systemd/system/bak.service [Unit] Description=backup my 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設置內(nèi)核參數(shù)進入特殊運行級別
設置內(nèi)核參數(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 shellcentos 7 破解root口令
啟動時任意鍵暫停啟動按e鍵進入編輯模式將光標移動linux16開始的行,添加內(nèi)核參數(shù)rd.break
按ctrl-x啟動
mount –o remount,rw /sysroot
chroot /sysroot
passwd root
touch /.autorelabel
修復GRUB2
GRUB“ the Grand Unified Bootloader” 引導提示時可以使用命令行界面 可從文件系統(tǒng)引導主要配置文件 /boot/grub2/grub.cfg修復配置文件 grub2-mkconfig > /boot/grub2/grub.cfg修復grub grub2-install /dev/sda BIOS環(huán)境 grub2-install UEFI環(huán)境實戰(zhàn)演練:
為編譯安裝的httpd服務,實現(xiàn)service unit文件破解centos7 口令修改默認的啟動內(nèi)核啟動時臨時禁用SELinux啟動時進入emergency模式刪除編譯安裝的新內(nèi)核
新聞熱點
疑難解答
圖片精選