Systemd:
POST –> Boot Sequeue(BIOS) –> Bootloader(MBR) –> kernel(ramdisk) –> rootfs –> /sbin/init
init:
CentOS5:SysV init
CentOS6:Upstart
CentOs7:Systemd
Systemd:系統啟動和服務器守護進程管理器,負責在系統啟動或運行時,激活系統資源,服務器進程和其它進程
Systemd的新特性:
系統引導時實現服務并啟動
按需激活
自動化的服務依賴關系管理
同時采用socket式與D-Bus總線式激活服務
系統狀態快照
核心概念:unit<單元>
unit由其相關配置文件進行標識、識別和配置;文件中主要包含了系統服務、監聽的socket、保存的快照以及其他與init相關的信息;這些配置文件主要保存在:
/usr/lib/systemd/system:每個服務最主要的啟動腳本設置,類似于之前的/etc/init.d/
/run/systemd/system:系統執行過程中所產生的服務腳本,比上面目錄優先運行
/etc/systemd/system:管理員建立的執行腳本,類似于/etc/rc.d/rcN.d/Sxx類的功能,比上面目錄優先運行
unit的常見類型:
Service unit:文件擴展名為.service,用于定于系統服務
Target unit:文件擴展為.target,用于模擬實現“運行級別”
Device unit:文件擴展名為.device,用于定義內核標識的設備
Mount unit:文件擴展名為.mount,定義文件系統掛載點
Socket unit:文件擴展名為.socket,用于標識系統進程間通信用到的socket文件
Snapshot unit:文件擴展名為.snapshot,管理系統快照
Swap unit:文件擴展名為.swap,用于標識swap設備
Automount unit:文件擴展名為.automount,文件系統自動掛載設備
Path unit:文件擴展名為.path,用于定義文件系統中的一文件或目錄
關鍵特性:
基于socket的激活機制;socket于程序分離
基于bus的激活機制
基于device的激活機制
基于Path的激活機制
系統快照:保存各unit的當前狀態信息于持久存儲設備中
向后兼容sysv init腳本
/etc/init.d/
不兼容:
systemctl的命令是固定不變的,不可擴展
非由systemd啟動的服務,systemctl無法與之通信
管理系統服務:
CentOS7:service類型的unit文件
systemctl命令:
systemctl – Control the systemd system and service manager
systemctl [OPTIONS…] COMMAND [NAME…]
啟動:service NAME start ==> systemctl start NAME.service
停止:service NAME stop ==> systemctl stop NAME.service
重啟:service NAME restart ==> systemctl restart NAME.service
狀態: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
查看某服務當前激活與否的狀態:systemctl is-active NAME.service
查看所有已激活的服務:systemctl list-units –type|-t service
查看所有服務(已激活及未激活):chkconfig –list ==> systemctl list-units –type|-t service –all|-a
設置服務開機自啟:chkconfig NAME on ==> systemctl enable NAME.service
禁止服務開機自啟:chkconfig NAME off ==> systemctl disable NAME.service
查看某服務是否能開機自啟:chkconfig –list NAME ==> systemctl is-enabled NAME.service
查看所有服務的開機自啟狀態:chkconfig –list ==> systemctl list-unit-files –type service
禁止某服務設定為開機自啟:systemctl mask NAME.service
取消此禁止:systemctl unmask NAME.service
查看服務的依賴關系:systemctl list-dependencies NAME.service
殺掉進程:systemctl kill 進程名
服務狀態:
systemctl list-units –type service –all 顯示狀態
loaded:Unit 配置文件已處理
active(running): 一次或多次持續處理的運行
active(exited): 成功完成一次性的配置
active(waiting): 運行中,等待一個事件
inactive: 不運行
enabled: 開機啟動
disabled: 開機不啟動
static:開機不啟動,但可被另一個啟用的服務激活
管理target units:
運行級別:
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
級別切換:init N ==> systemctl list-units NAME.target
查看級別:runlevel ==> systemctllist-units –type target
查看所有級別:systemctl list-units -t target -a
獲取默認運行級別:systemctl get-default
修改默認運行級別:systemctl set-default NAME.target
切換至緊急救援模式:systemctl rescue
切換至emergency模式:systemctl emergency
其他常用命令:
關機: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
執行initrd.target 所有單元,包括掛載/etc/fstab
從initramfs 根文件系統切換到磁盤根目錄
systemd 執行默認target 配置,配置文件
/etc/systemd/default.target /etc/systemd/system/
systemd 執行sysinit.target 初始化系統及basic.target 準備操作系統
systemd 啟動multi-user.target 下的本機與服務器服務
systemd 執行multi-user.target 下的/etc/rc.d/rc.local
Systemd 執行multi-user.target 下的getty.target 及登入服務
systemd 執行graphical 需要的服務
service unit file:
·文件通常由三部分組成:
[Unit]:定于與Unit類型無關的通用選項;用于提供unit的描述信息、unit行為及依賴關系等
[Service]:與特定類型相關的專業選項;此處為Service類型
[Install]:定義由“systemctl enable”以及“systemctl disable”命令在實現服務啟用或禁用時用到的一些選項
·Unit段的常用選項:
Description:描述信息;意義性描述
After:定義unit的啟動次序;表示當前unit應該晚于那些unit啟動;其功能與Before相反
Requles:依賴到的其他units;強依賴,被依賴的units無法激活時,當前unit即無法激活
Wants:依賴到的其他units;弱依賴
Conficts:定義units間的沖突關系
·Service段的常用選項:
Type:用于定義影響ExecStart及相關參數的功能的unit進程啟動類型
類型:<常見的是simple forking notify>
simple:默認值,這個daemon主要由ExecStart接的指令串來啟動,啟動后常駐于內存中
forking:由ExecStart啟動的程序透過spawns延伸出其他子程序來作為此daemon的主要服務。原生父程序在啟動結束后就會終止
oneshot:與simple類似,不過這個程序在工作完畢后就結束了,不會常駐在內存中
dbus:與simple類似,但這個daemon必須要在取得一個D-Bus的名稱后,才會繼續運作. 因此通常也要同時設定BusNname= 才行
notify:在啟動完成后會發送一個通知消息。還需要配合NotifyAccess來讓Systemd接收消息
idle:與simple 類似,要執行這個daemon必須要所有的工作都順利執行完畢后才會執行。這類的daemon 通常是開機到最后才執行激活的服務
EnvironmentFile:環境配置文件
ExecStart:指明啟動unit要運行的命令或腳本;ExecStartPre,ExecStartPost
ExecStop:指明停止unit要運行的命令或腳本
Restart:當設定Restart=1 時,則當次daemon 服務意外終止后,會再次自動啟動此服務
·Install段的常用選項:
Alias:別名,可使用systemctl command Alias.service
RequiredBy:被那些units所依賴;強依賴
WantsBy:被那些units所依賴;弱依賴
·注意:對于新創建的unit文件或修改了的unit文件,要通知systemc重載此配置文件
# systemctl daemod-reload
服務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
設置內核參數:
設置內核參數 ,只影響當次啟動啟動時,在linux16 行后添加systemd.unit=desired.target
systemd.unit=emergency.target
systemd.unit=recure.target
recure.target比emergency支持更多的功能,例如日志等
修改默認啟動項:
修改/etc/default/grub文件可以修改grub2的啟動菜單,修改完成后用:
# grub2-mkconfig -o /boot/grub2/grub.cfg
重新生成配置文件
GRUB_DEFAULT=# :默認的啟動菜單為那個
啟動排錯:
文件系統損壞
先嘗試自動修復,失敗則進入emergency shell,提示用戶修復
在/etc/fstab不存在對應的設備和UUID
等一段時間,如不可用,進入emergencyshell
在/etc/fstab不存在對應掛載點
systemd 嘗試創建掛載點,否則提示進入emergency shell.
在/etc/fstab不正確的掛載選項
提示進入emergency shell
破解root口令:
啟動時任意鍵暫停啟動
按e鍵進入編輯模式
將光標移動linux16 開始的行,添加內核參數rd.break
按ctrl-x 啟動
mount –o remount,rw /sysroot
chroot /sysroot
passwd root
touch /.autorelabel
修復GRUB2:
GRUB “the Grand Unified Bootloader”
引導提示時可以使用命令行界面
可從文件系統引導
主要配置文件 /boot/grub2/grub.cfg
修復配置文件
grub2-mkconfig > /boot/grub2/grub.cfg
修復grub
grub2-install /dev/sda BIOS 環境
grub2-install UEFI 環境
練習:
1、為編譯安裝的httpd服務,實現service unit文件
獲取源碼包
tar xf httpd-2.4.9.tar.bz2
cd httpd-2.4.9/
./configure –prefix=/usr/local/apache
make
make install
echo "ServerName local.localdomain" /usr/local/apache/conf/httpd.conf
創建service unit文件
vim /etc/systemd/system/apache.service
重載配置文件:# systemctl daemod-reload
啟動服務,查看端口,并訪問網頁
關閉服務,查看端口情況
2、破解centos7口令
啟動時任意鍵暫停啟動
按e鍵進入編輯模式
將光標移動linux16 開始的行,添加內核參數rd.break
按ctrl+x 啟動
mount –o remount,rw /sysroot
chroot /sysroot
passwd root
touch /.autorelabel
3、修改默認的啟動內核
# vim /etc/default/grub
# grub2-mkconfig -o /boot/grub2/grub.cfg
4、啟動時臨時禁用SELinux
啟動時任意鍵暫停啟動
按e鍵進入編輯模式
將光標移動linux16 開始的行,添加內核參數selinux=0
按ctrl+x 啟動
5、啟動時進入emergency模式
啟動時任意鍵暫停啟動
按e鍵進入編輯模式
將光標移動linux16 開始的行,添加內核參數systemd.unit=emergency.target
按ctrl+x 啟動
6、刪除編譯安裝的新內核
刪除/boot目錄下新內核的vmlinuz和initramfs文件
刪除/usr/lib/modules/目錄下新內核生成的文件
刪除/boot/grub2/grub.cfg文件中,新內核生成的菜單
原創文章,作者:megedugao,如若轉載,請注明出處:http://www.www58058.com/48027