天天看點

centos 7 新特性之systemdsystemd介紹核心概念 : unit服務管理服務狀态systemctl 指令示例運作級别其他指令centos 7 引導順序service unit 檔案格式服務unit檔案示例    centos 7 啟動相關練習

systemd介紹

POST --> Boot Sequence --> Bootloader --> kernel + initramfs(initrd) --> rootfs --> /sbin/init

init: 

    CentOS 5: SysV init 

    CentOS 6: Upstart 

    CentOS 7: Systemd 

systemd : 系統啟動和伺服器守護程序管理器,負責在系統啟動或運作時,激活系統資源,伺服器程序和其他程序

systemd新特性:
  •     系統引導時實作服務并行啟動
  •     按需啟動守護程序
  •     自動化的服務依賴關系管理
  •     同時采用socket式與D-Bus總線式激活服務
  •     系統狀态快照

核心概念 : unit

        unit 表示不同類型的systemd對象,通過配置檔案進行辨別和配置,檔案中主要包含了系統服務,監聽socket,儲存的系統快照以及其他與init相關的資訊

配置檔案 :
/usr/lib/systemd/system : 内個服務最主要的啟動腳本設定,類似于之前的 /etc/init.d/

/run/systemd/system : 系統執行過程中所産生的服務腳本,比上面目錄優先運作

/etc/systemd/system : 管理者建立的執行腳本,類似于 /etc/rc.d/rcN.d/Sxx 類的功能,比上面目錄優先運作 
           
unti類型:
systemctl -t help  : 檢視unit類型
           
[[email protected] ~]# systemctl -t help
Available unit types:  #可用的unit類型
service        #檔案擴充名為 .service ,用于定義系統服務
socket    #用于辨別程序間通信用的socket檔案,也可以在系統啟動時,延遲啟動服務,實作按需啟動
busname        
target       #用于模拟實作"運作級别"
snapshot      #管理系統快照
device       #用于定義核心識别的裝置
mount       #定義檔案系統挂載點
automount     #檔案系統的自動挂載點
swap       #用于辨別swap裝置
timer           
path    #用于定義檔案系統的一個檔案或目錄使用,常用于當檔案系統變化時,延遲激活服務,如: spool 目錄
slice
scope
           
關鍵特性:

    基于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.service
           

條件式重新開機 : 已啟動才啟動,否則不做操作

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
           

檢視某服務目前激活與否的狀态:

systemctl is-active name.service
           

檢視所有已經激活的服務:

systemctl list-units --type|-t service
           

檢視所有服務:

systemctl list-units --type|-t service -all|-a
           

設定某服務開機自啟:

chkconfig name on ==> systemctl enbale name.service
           

設定某服務開機禁止啟動:

chkconfig name off ==> systemctl disable name.service
           

檢視所有服務的開機自啟狀态:

chkconfig --list ==> systemctl list-unit-files --type service
           

用來列出該服務在哪些運作級别下啟用和禁用:

chkconfig sshd -list ==> ls /etc/systemd/system/*.wants/sshd.service
           

檢視服務是否開機自啟:

systemctl is-enabled 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 : 開機不啟動,但可被另一個啟用的服務激活
           

systemctl 指令示例

顯示所有單元狀态:

systemctl 或 systemctl list-units
           

隻顯示服務單元的狀态:

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
           

列出活動狀态的所有服務單元:

systemctl list-units --type service
           

列出所有服務單元:

systemctl list-units -t service -a
           

檢視服務單元的啟用和禁用狀态:

systemctl list-unit-files -t service
           

列出失敗的服務:

systemctl --failed -t service
           

列出依賴的單元:

systemctl list-dependencies sshd
           

驗證sshd服務是否開機啟動:

systemctl is-enabled sshd
           

禁用network,使之不能自動啟動,但手動可以

systemctl disable network
           

啟用network

systemctl enable network
           

運作級别

target units:

    unit配置檔案: .target

ls /usr/lib/systemd/system/*.target

systemctl list-unit-files --type target --all
           
運作級别:
centos 7 新特性之systemdsystemd介紹核心概念 : unit服務管理服務狀态systemctl 指令示例運作級别其他指令centos 7 引導順序service unit 檔案格式服務unit檔案示例    centos 7 啟動相關練習
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
           
centos 7 新特性之systemdsystemd介紹核心概念 : unit服務管理服務狀态systemctl 指令示例運作級别其他指令centos 7 引導順序service unit 檔案格式服務unit檔案示例    centos 7 啟動相關練習
級别切換: 
init N ==> sytemctl isolate name.target

systemctl isolate multi-user.target
           

    注: 隻有 /lib/systemd/system/*.target檔案中

    AllowIsolate=yes 才能切換(修改檔案需執行 systemctl daemon-reload 才能生效)

檢視 target :

runlevel 或 who -r
           
centos 7 新特性之systemdsystemd介紹核心概念 : unit服務管理服務狀态systemctl 指令示例運作級别其他指令centos 7 引導順序service unit 檔案格式服務unit檔案示例    centos 7 啟動相關練習
擷取預設運作級别:
/etc/inittab ==> systemctl get-default 
           
修改預設級别:
/etc/inittab ==> systemctl set-default name.target

systemctl set-default multi-user.target

ls -l /etc/systemd/system/default.target
           

其他指令

切換至緊急救援模式:
systemctl rescue
           
切換至emergency 模式:
systemctl emergency
           
其他常用指令:
傳統指令init,poweroff,halt,reboot 都成為systemctl的軟連結
關機 : systemctl halt,systemctl poweroff
重新開機 : systemctl reboot
挂起 : systemctl suspend
休眠 : systemctl hibernate
休眠并挂起 : systemctl hybrid-sleep 
           

centos 7 引導順序

UEFI或BIOS初始化,運作POST開機自檢

選擇啟動裝置

引導裝載程式,centos是grub2

加載裝載程式的配置檔案 : /etc/grub.d/      /etc/default/grub  /boot/grub2/grub.cfg

加載initramfs驅動子產品

加載核心

核心初始化,centos 7使用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] : 與特定類型相關的專用選項,此處為Service類型

[Install] : 定義由 "systemctl enable"以及"systemctl disable" 指令在實作服務啟用或禁用是用到的一些選項

Unit常用的選項:

    Description : 描述資訊

    After : 定義unit的啟動次序,表示目前unit應該晚于哪些unit啟動,其功能與Before相反

    Requires : 依賴到的其他units,強依賴,被依賴的units無法激活,目前unit即無法激活

    Wants : 依賴到的其他units,弱依賴

    Conflicts : 定義units間的沖突關系

Service常用選項:

    Type : 定義影響ExecStart及相關參數的功能的unit程序啟動類型

    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 : ExecStart前運作

    ExecStartPost : ExecStart後運作

    ExecStop : 指明停止unit要運作的指令或腳本

    Restart : 當設定Restart=1時,則當次daemon服務意外終止後,會再次自動啟動此服務

Install常用選項

    Alias : 别名,可使用systemctl command Alias.service

    RequiredBy : 被哪些units所依賴,強依賴

    WantedBy : 被哪些units所依賴,弱依賴

    Also : 安裝本服務的時候還要安裝别的相關服務

注意: 對于新建立的unit檔案,或者修改了的unit檔案,要通知systemd重載此配置檔案,而後可以選擇重新開機

systemctl daemon-reload
           

服務unit檔案示例    

vim /testdir/backup_etc.sh
#!/bin/bash
tar -Jcf  /testdir/backup_etc_`date +%F`.tar.gz /etc &> /dev/null
vim /etc/systemd/system/backup_etc.service
[Unit]
Description=back up /etc
Requires=atd.service
[Service]
Type=simple
ExecStart=/bin/bash -c "echo /testdir/backup_etc.sh | at now"
           
centos 7 新特性之systemdsystemd介紹核心概念 : unit服務管理服務狀态systemctl 指令示例運作級别其他指令centos 7 引導順序service unit 檔案格式服務unit檔案示例    centos 7 啟動相關練習

centos 7 啟動相關

設定核心參數,隻影響當次啟動

啟動時,在linux16行後添加 systemd.unit=desired.target

systemd.unit=emergency.target

system.unit=rescue.target

recure.target 比 emergency 支援更多的功能,例如日志等

啟動排錯:

檔案系統損壞:

    先嘗試自動修複,失敗則進入emergency shell ,提示使用者修複

在 /etc/fstab 不存在對應的裝置和UUID,等一段時間,如不可用,進入emergency shell

在 /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 :

引導提示時可以使用指令行界面可從檔案系統引導

主要配置檔案 /boot/grub2/grub.cfg

修改配置檔案

grub2-mkconfig > /boot/grub2/grub.cfg  
或 
grub2-mkconfig -o /boot/grub2/grub.cfg
           

修複grub

grub2-install /dev/sda
           

練習

1,為編譯安裝的httpd服務,實作service unit檔案

vim /etc/man_db.conf

centos 7 新特性之systemdsystemd介紹核心概念 : unit服務管理服務狀态systemctl 指令示例運作級别其他指令centos 7 引導順序service unit 檔案格式服務unit檔案示例    centos 7 啟動相關練習
centos 7 新特性之systemdsystemd介紹核心概念 : unit服務管理服務狀态systemctl 指令示例運作級别其他指令centos 7 引導順序service unit 檔案格式服務unit檔案示例    centos 7 啟動相關練習
centos 7 新特性之systemdsystemd介紹核心概念 : unit服務管理服務狀态systemctl 指令示例運作級别其他指令centos 7 引導順序service unit 檔案格式服務unit檔案示例    centos 7 啟動相關練習
centos 7 新特性之systemdsystemd介紹核心概念 : unit服務管理服務狀态systemctl 指令示例運作級别其他指令centos 7 引導順序service unit 檔案格式服務unit檔案示例    centos 7 啟動相關練習
centos 7 新特性之systemdsystemd介紹核心概念 : unit服務管理服務狀态systemctl 指令示例運作級别其他指令centos 7 引導順序service unit 檔案格式服務unit檔案示例    centos 7 啟動相關練習
centos 7 新特性之systemdsystemd介紹核心概念 : unit服務管理服務狀态systemctl 指令示例運作級别其他指令centos 7 引導順序service unit 檔案格式服務unit檔案示例    centos 7 啟動相關練習
centos 7 新特性之systemdsystemd介紹核心概念 : unit服務管理服務狀态systemctl 指令示例運作級别其他指令centos 7 引導順序service unit 檔案格式服務unit檔案示例    centos 7 啟動相關練習

2,破解centos7 密碼

centos 7 新特性之systemdsystemd介紹核心概念 : unit服務管理服務狀态systemctl 指令示例運作級别其他指令centos 7 引導順序service unit 檔案格式服務unit檔案示例    centos 7 啟動相關練習

3,修改預設的啟動核心 

centos 7 新特性之systemdsystemd介紹核心概念 : unit服務管理服務狀态systemctl 指令示例運作級别其他指令centos 7 引導順序service unit 檔案格式服務unit檔案示例    centos 7 啟動相關練習

4,啟動時臨時禁用SELinux 

centos 7 新特性之systemdsystemd介紹核心概念 : unit服務管理服務狀态systemctl 指令示例運作級别其他指令centos 7 引導順序service unit 檔案格式服務unit檔案示例    centos 7 啟動相關練習

5,啟動時進入emergency模式 

centos 7 新特性之systemdsystemd介紹核心概念 : unit服務管理服務狀态systemctl 指令示例運作級别其他指令centos 7 引導順序service unit 檔案格式服務unit檔案示例    centos 7 啟動相關練習
centos 7 新特性之systemdsystemd介紹核心概念 : unit服務管理服務狀态systemctl 指令示例運作級别其他指令centos 7 引導順序service unit 檔案格式服務unit檔案示例    centos 7 啟動相關練習

6,删除編譯安裝的新核心

centos 7 新特性之systemdsystemd介紹核心概念 : unit服務管理服務狀态systemctl 指令示例運作級别其他指令centos 7 引導順序service unit 檔案格式服務unit檔案示例    centos 7 啟動相關練習

繼續閱讀