Linux systemd管理
本章內容:
centos7啟動
unit介紹
服務管理和查看
啟動排錯
破解口令
恢復grub2
systemd:
系統啟動和服務守護進程管理器,為系統的第一個進程,負責在系統啟動或運行時,激活系統資源,服務進程和其它進程。
systemd新特性:
系統引導時實現服務并行啟動;
按需啟動守護進程;
自動化的服務依賴關系管理;
同時采用socket式和D-Bus(desktop-Bus)總線式激活服務;
socket:監聽服務端口,服務并未啟動,當有進程訪問這個端口的服務時,socket采取激活端口對應的服務,相當于,centos6上的xinetd服務。
D-Bus總線:系統中的圖形工具都是基于D-Bus總線激活的。
系統狀態快照;
核心概念:unit
unit表示不同類型的systemd對象,通過配置文件進行標識和配置,文件中主要包含了系統服務、監聽socket、保護的系統快照以及其它與init相關的信息。
centos7:系統服務腳本文件路徑:
centos7的系統服務腳本文件的存放路徑為/usr/lib/systemd/system,相當于centos6系統中的/etc/rc.d/init.d目錄下的系統服務腳本文件。
示例:
[root@centos7 system]# cd /usr/lib/systemd/system
centos7:系統運行自產生的服務腳本存放路徑:/run/systemd/system
示例:
root@centos7 system]# cd /run/systemd/system/
centos7:系統管理員自建立的系統服務執行腳本建議存放到:/etc/systemd/system目錄下,此目錄下的優先級要高于/usr/lib/systemd/system目錄的優先級。
示例:
[root@centos7 system]# cd /etc/systemd/system/
unit類型:
查看unit類型:
systemctl -t (–type) help
示例:
[root@centos7 cd]# systemctl -t help
Available unit types:
service
socket
target
device
mount
automount
snapshot
timer
swap
path
slice
scope
[root@centos7 cd]#
service unit:文件擴展名 .service,用于定義系統服務。
target unit:文件擴展名 .target ,用于模擬實現“運行級別”。
device unit:用于定義內核識別的設備。
mount unit:.mount,定義文件系統掛載點。
socket unit:.socket,用于標識進程間通信用的socket文件,也可以在系統啟動時,延時啟動服務,實現按需啟動。
snapshot unit:.snapshot,管理系統快照。
swap unit:.swap,用于標識swap設備。
automount unit:.automount,文件系統的自動掛載點。
path unit :.path,用于定義文件系統中的一個文件或目錄使用,長用于當文件系統變化時,延遲激活服務,如spool目錄。
systemd關鍵特性:
基于socket的激活機制:socket與服務程序分離;
基于D-Bus的激活機制:
基于device的激活機制:
基于path的激活機制:
系統快照:保存個unit的當前狀態信息于持久存儲設備中向后兼容sysv init 腳本。
systemctl命令固定不變,不可擴展,systemctl是一個二進制程序,后跟的參數都是固定好的。
管理系統服務:
命令:systemctl COMMAND name.service
啟動服務:systemctl start name.service
停止服務:systemctl stop name.service
重啟服務:systemctl restart name.service
查看狀態:systemctl status name.service
條件式重啟:已啟動才重啟,否則不做任何操作。
systemctl try-restart name.service
重載或重啟服務:先加載,在重啟:
systemctl reload-or-restart name.service
重載或條件式重啟服務:
systemctl reload-or-try-restart name.service
禁止自動和手動啟動:
systemctl mask name.service
示例:
[root@centos7 init.d]# systemctl mask httpd
ln -s '/dev/null' '/etc/systemd/system/httpd.service'
[root@centos7 init.d]# ll /etc/systemd/system/httpd.service
lrwxrwxrwx. 1 root root 9 sep 27 05:02 /etc/systemd/system/httpd.service -> /dev/null
取消禁止自動和手動啟動:
systemctl unmask name.service
示例:
[root@centos7 init.d]# systemctl unmask httpd
rm '/etc/systemd/system/httpd.service'
[root@centos7 init.d]#
查看某服務當前激活與否的狀態:
systemctl is-active name.service
示例:
[root@centos7 system]# systemctl is-active httpd
active
[root@centos7 system]#
查看所有已激活的服務:
systemctl list-units -t | –type service
示例:
[root@centos7 system]# systemctl list-units -t service | wc -l
74
[root@centos7 system]#
查看所有服務:
systemct list-units -t service -a|-all
查看服務是否開機自啟動:
systemctl is-enabled name.service
示例:
[root@centos7 system]# systemctl is-enabled httpd
disabled
[root@centos7 system]#
設定某服務開機自啟動:
systemctl enable name.servcie
示例:
[root@centos7 system]# systemctl enable httpd
ln-s'/usr/lib/systemd/system/httpd.service'
'/etc/systemd/system/multi-user.target.wants/httpd.service'
[root@centos7 system]#
設定某服務開機禁止自啟動:
systemctl disable name.service
示例:
[root@centos7 system]# systemctl disable httpd.service
rm '/etc/systemd/system/multi-user.target.wants/httpd.service'
[root@centos7 system]#
查看所有服務的開機自啟狀態:
systemctl list-unit-files -type service
用來列出該服務在那些運行級別下啟用和禁用:
ls /etc/systemd/system/*.wants/name.service
示例:
[root@centos7 system]# ls /etc/systemd/system/*.wants/httpd.service
/etc/systemd/system/multi-user.target.wants/httpd.service
[root@centos7 system]#
殺掉進程:
systemctl kill
服務狀態:
systemctl list-units-files –type service -all
loaded :unit配置文件已經被加載過了;
active(running):一次或多次持續處理的運行;
action(exited):成功完成一次性的配置;
active(waiting):運行中等待一個事件;
inactive:不運行;
enabled:開機自動;
disabled:開機不啟動;
static:開機不啟動,但可被另一個啟用的服務激活;
運行級別:
target units:
unit配置文件:/usr/lib/systemd/system/*.target
centos 6 centos7
runlevel0.target poweroff.target
runlevel1.target rescue.target
runlevel2.target multi-user.target
runlevel3.target multi-user.target
runlevel4.target multi-user.target
runlevel5.target graphical.target
runlevel6.target reboot.target
切換運行級別:
init # ——–> systemctl isolate name.target
注意:只有/usr/lib/systemd/system/*.target文件中allowisolate=yes才可以切換運行級別(修改文件需執行 systemctl daemon-reload 才可以生效)
示例:
[root@centos7 system]# systemctl isolate multi-user.target
查看target:
runlevel who -r
systemctl list-units -t target
查看系統的默認運行級別:
systemctl get-default
示例:
[root@centos7 Desktop]# systemctl get-default
graphical.target
[root@centos7 Desktop]#
修改默認運行級別:
systemctl set-default name.target
示例:
[root@centos7 Desktop]# systemctl set-default graphical.target
rm '/etc/systemd/system/default.target'
ln -s '/usr/lib/systemd/system/graphical.target' '/etc/systemd/system/default.target'
[root@centos7 Desktop]#
[root@centos7 Desktop]# ls -l /etc/systemd/system/default.target
切換至緊急救援模式:
systemctl rescue
切換至emergency模式:
systemctl emergency
其他常用命令: init 、poweroff、 reboot都成為systemctl的軟鏈接
關機:systemctl halt systemctl poweroff
重啟:systemctl reboot
掛起:systemctl suspend
休眠:systemctl hibernate
休眠并掛起:systemctl hybrid-sleep
centos7啟動引導順序:
UEFI或Bios初始化,運行POST開機自檢。
選擇啟動設備。
引導裝載程序,centos7是使用grub2。
加載程序的配置文件:/etc/grub2.cfg /etc/default/grub /boot/grub2/grub2/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 文件格式:
/etc/systemd/system:系統管理員和用戶使用。
/usr/lib/systemd/system:發行版打包者使用。
以“#”開頭的行后面的內容會被認為是注釋。
相關的布爾值,1、yes、on、true都是開啟,0、no、off、false都是關閉。
時間單位默認是秒,所以要用毫秒(ms)分鐘(m)等請顯是說明。
service unit file文件通常由三部分組成:
[Unit]:定義與unit類型無關的通用選項;由于提供unit的描述信息、unit行為及依賴關系等。
[Service]:定義有“system enable”以及“systemctl disable”命令在實現服務啟用或禁用時用到的一些選項。
Unit段的常用選項:
Description:描述信息
After:定義unit的啟動次序,表示當前unit應該晚于那些unit啟動,其功能與Before相反。
Requires:依賴到的其他unit,強依賴,被依賴的units無法激活時,當前unit即無法激活。
Wants:依賴到的其他units,弱依賴。
Centos:定義units間的沖突關系。
Service段的常用選項:
Type:定義影響execstart及相關參數的功能的unit進程啟動類型。
simple:默認值,這個daemon主要由execstart接的指令串來啟動,啟動后常駐于內存中。
forking:由execstart啟動的程序透過spawns延伸出其他子程序來作為此daemon的主要服務。原生父程序在啟動結束后就會終止。
oneshot:與simple類似,不過這個程序在工作完畢后就結束了,不會常駐在內存中。
dbus:與simple類似,但這個daemon必須要在取得一個D-Bus的名稱后,才會繼續運作,因此通常也要同時設定busname=才行。
notify:在啟動完成后會發送一個通知消息。還需要配合notifyaccess來讓systemd接受消息。
idle:與simple類似,要執行這個daemon必須要所有的工作都順利執行完畢后才會執行。這類的daemon通常是開機到最后才執行即可的服務。
Environmentfile:環境配置文件。
Execstart:指明啟動unit要運動命令或腳本的絕對路徑。
Execstartpre:Execstart前運行。
Execstartpost:Execstart后運行。
Restart:當設定Restart=1時,則當次daemon服務以外終止后,會再次自動啟動此服務。
Install段的常用選項:
Alias:別名,可使用systemctl command alias.service
Requiredby:被哪些units所依賴,強依賴。
Wantdby:被哪些units所依賴,弱依賴。
Also:安裝本服務的時候還要安裝別的相關服務。
注意:對于新創建的unit文件,或者修改了的unit文件,要通知systemd重載配置文件,而后可以選擇重啟
執行 systemctl daemon-reload
設置內核參數:
設置內核參數,只影響當次啟動。
啟動時,在Linux16行后添加systemd.unit=desired.target
systemd.unit=emergency.target
systemd.unit=recure.target
recure.target比emergency支持更多的功能,例如日志。
示例:
在Linux16行最后添加:systemd-unit=multi-user.target,系統啟動后進入到字符界面。
文件系統損壞:
先嘗試自動修復,失敗則進入emergency shell,提示用戶修復。
在/etc/fstab不存在對應的設備和UUID等一段時間,如不可用,進入emergency shell。
在/etc/fstab不存在對應掛載點,systemd嘗試創建掛載點,否則提示進入emergency shell 。
在/etc/fstab不正確的掛載選項,提示進入emergency shell。
破解root口令:
(1)啟動時在看到grub啟動菜單時,按任意鍵暫停啟動;
(2)按“e”鍵進入編輯模式;
(3)將光標移動到Linux16開始的行,在行尾添加內核參數:rd.break
(4)按ctrl-x啟動,進入到類似于單用戶的shell中。
(5)進來之后執行mount命令查看系統根所掛載的目錄
(6)執行mount -o remount,rw /sysroot以讀寫方式沖洗掛載系統根“/sysroot”
(7)執行chroot /sysroot
(8)執行passwd root
(9)執行 touch /.autolabel重新給/etc/shadow文件打標簽,不然selinux策略會阻止啟動,造成啟動故障。
修該grub2配置文件:
centos7中的grub主配置文件/boot/grub2/grub.cfg
grub.cfg文件的配置模板:/etc/default/grub
修改好的模板文件參數使用 grub2-mkconfig -o /boot/grub2/grub.cfg重定向到grub主配置文件中。
修復grub:
BIOS環境:grub2-install /dev/sda
UEFI環境:grub2-install
原創文章,作者:zhengyibo,如若轉載,請注明出處:http://www.www58058.com/49570