管理systemd
一、systemd介紹
回顧一下centos的啟動流程
POST –> Boot Sequence –> Bootloader –> kernel +
initramfs(initrd) –> rootfs –> /sbin/init
在centos7中系統啟動的第一個意義上的進程就是init,只不過在centos7上變成了Systemd這個守護進程
Systemd :系統啟動和服務器守護進程管理器,負責在系統
啟動或運行時,激活系統資源,服務器進程和其它進程
配置文件:
/usr/lib/systemd/system:每個服務最主要的啟動腳本
/usr/systemd/system:系統執行過程中所產生的服務腳本,比上面目錄優先運行。
/etc/systemd/systemd:管理員建立的執行腳本,類似于/ 于/etc/rc.d/rcN.d/Sxx類的功能,比上面目錄優先運行
二、類型
Systemctl –t help 查看unit 類型
Service unit: 文件擴展名為.service, 用于定義系統服務
Target unit: 文件擴展名為.target ,用于模擬實現“運行級
別”
Device unit: .device, 用于定義內核識別的設備
Mount unit: .mount, 定義文件系統掛載點
Socket unit: .socket, 用于標識進程間通信用的socket 文件,也可在系統啟動時,延遲啟動服務,實現按需啟動
特性:
關鍵特性:
基于socket 的激活機制:socket 與服務程序分離
基于d-bus 的激活機制:
基于device 的激活機制:
基于path 的激活機制:
系統快照:保存各unit 的當前狀態信息于持久存儲設備中
向后兼容sysv init 腳本
不兼容:
systemctl 命令固定不變,不可擴展
非由systemd 啟動的服務,systemctl 無法與之通信和控制
三、管理服務
管理系統服務:
CentOS 7: service unit
注意:能兼容早期的服務腳本
命令:systemctl COMMAND name.service
啟動: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.servic
條件式重啟:已啟動才重啟,否則不做操作
service name condrestart ==> systemctl try-
restart name.service
重載或重啟服務:先加載,再啟動
systemctl reload-or-restart name.service
重載或條件式重啟服務:
systemctl reload-or-try-restart name.service
禁止自動和手動啟動:
systemctl mask name.service
取消禁止:
systemctl unmask name.service
四、centos7的引導順序
(1)UEFi 或BIOS 初始化,運行POST 開機自檢
(2)選擇啟動設備
(3) 引導裝載程序, centos7 是grub2
(4) 加載裝載程序的配置文件:/etc/grub.d/
(5)/etc/default/grub /boot/grub2/grub.cfg
(6)加載initramfs 驅動模塊
(7)加載內核選項
(8)內核初始化,centos7 使用systemd 代替init
(9)執行initrd.target 所有單元,包括掛載/etc/fstab
(10)從initramfs 根文件系統切換到磁盤根目錄
(11)systemd 執行默認target 配置,配置文件
/etc/systemd/default.target /etc/systemd/system/
(12) systemd 執行sysinit.target 初始化系統及basic.target 準備操作系統
(13)systemd 啟動multi-user.target 下的本機與服務器服務
(14)systemd 執行multi-user.target 下的/etc/rc.d/rc.local
(15)Systemd 執行multi-user.target 下的getty.target 及登入服務
(16) 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] :與特定類型相關的專用選項;此處為Service 類型
? [Install] :定義由“systemctl enable” 以及"systemctl disable“ 命令在實現服務啟用或禁用時用到的一些選項
service unit 文件格式
Unit 段的常用選項:
Description :描述信息
After :定義unit 的啟動次序,表示當前unit 應該晚于哪些
unit 啟動,其功能與Before 相反
Requires :依賴到的其它units ,強依賴,被依賴的units 無法
激活時,當前unit 即無法激活
Wants :依賴到的其它units,弱依賴
Conflicts :定義units
EnvironmentFile :環境配置文件
ExecStart :指明啟動unit 要運行命令或腳本的絕對路徑
ExecStartPre: : ExecStart 前運行
ExecStartPost: : ExecStart 后運行
ExecStop :指明停止unit 要運行的命令或腳本
Restart :當設定Restart=1 時,則當次daemon 服務意外終
止后,會再次自動啟動此服務。
服務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
作業
1、為編譯安裝的httpd服務,實現service unit文件
添加了service unit之后
服務器沒有啟動,出現了如下的報錯
解決辦法:
(1)可以設定httpd.conf文件中的 ServerName,如下:ServerName localhost:80
(2)在 /etc/hosts 中填入自己的主機名稱,如下:127.0.0.1 localhost (用戶名稱)
systemctl daemon-reload
vsystemctl start http
2、破解centos7 口令
答:
(1) 啟動時任意鍵暫停啟動
v(2)按 按e 鍵進入編輯模式
v(3)將光標移動linux16 開始的行,添加內核參數rd.break
v(4)按 按ctrl-x 啟動
v(5) mount –o remount,rw /sysroot
v(6)chroot /sysroot
v(7) passwd root
v(8)touch /.autorelabel
3、修改默認的啟動內核
答:(1)vim /etc/default/grub
修改GRUB_DEFAULT=saved—-》GRUB_DEFAULT=0
(2)grub2-mkconfig -o /boot/grub2/grub.cfg
4、啟動時臨時禁用SELinux
5、啟動時進入emergency模式
啟動時任意鍵暫停啟動,按e 鍵進入編輯模式;將光標移動linux16 開始的行,添加內核參數systemd.unit=rescue.target 是一個設置基本系統和救援 shell 的特殊 target unit (與運行級1相似);systemd.unit=emergency.target 與傳遞保留參數的 init=/bin/sh 給系統使系統從該狀態啟動相似。
原創文章,作者:178babyhanggege,如若轉載,請注明出處:http://www.www58058.com/48426