Centos 7 之systemd

Centos 7 之systemd

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總線式激活服務

系統狀態快照

核心概念:

unitunit表示不同類型的systemd對象,通過配置文件進行標識和配置;文件中主要包含了系統服務、監聽socket、保存的系統快照以及其它與init相關的信息

配置文件:

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

但是服務配置文件的內容并不是腳本的形式,自行添加的服務放在該文件夾里

wKiom1fkmbrTz1jKAAA3_VNFh_M729.png

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

wKioL1fkmdHyZBuyAAAUgkaNA8g347.png

/etc/systemd/system:管理員建立的執行腳本,類似于/etc/rc.d/rcN.d/Sxx類的功能,比上面目錄優先運行

wKioL1fkmdyRVWbpAAApABNEM1c960.png

Unit類型

Systemctl –t help 查看unit類型

wKioL1fkmeqT6YyqAAAcywwu3oA883.png

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,用于定義文件系統中的一個文件或目錄使用,常

用于當文件系統變化時,延遲激活服務,如: spool 目錄

特性

關鍵特性:

基于socket的 激活機制: socket與服務程序分離

基于d-bus的激活機制:當運行桌面時激活

基于device的激活機制:當訪問某個設備時激活

基于path的激活機制: 當訪問某目錄時激活

系統快照:保存各unit的當前狀態信息于持久存儲設備中

向后兼容sysv init腳本

不兼容:

systemctl命令固定不變,不可擴展(centos6及之前的版本的服務可以自定義添加選項,由此可以擴展服務功能的多樣性)

非由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 tryrestart name.service

重載或重啟服務:先加載,再啟動

systemctl reload-or-restart name.service

重載或條件式重啟服務:

systemctl reload-or-try-restart name.service

禁止自動和手動啟動:

systemctl mask name.service

wKioL1fkmfvQB3cSAAARopr1O4c857.png

實際是在/etc/systemd/system 下創建一個服務的軟鏈接指向/dev/null,由于/etc/systemd/system目錄的優先級比/usr/lib/systemd/system 高,只會找到etc的文件夾而不會找usr

取消禁止:(實際是刪除etc下對應的軟鏈接)

systemctl unmask name.service

wKiom1fkmgjiqPnaAAARoIxfM5U043.png

服務查看

查看某服務當前激活與否的狀態:

systemctl is-active name.service

查看所有已經激活的服務:

systemctl list-units –type|-t service

查看所有服務:

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

chkconfig命令的對應關系:(在centos7里chkconfig命令已經弱化,只是為了保留原有的方式才保留,運行chkconfig命令時系統會提示運行systemctl list-dependencies [target]

設定某服務開機自啟:

chkconfig name on ==> systemctl enable name.service

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

chkconfig name off ==> systemctl disable name.service


wKioL1fkmnOxy_-OAABEAfbAhrY579.png

在centos7中,絕大部分關于  chkconfig  命令已經改為  systemctl

查看所有服務的開機自啟狀態:

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

wKiom1fkmo6yOmntAABSXFxNRs8839.png

systemctl 命令示例(除了一些必有的提示之外,命令的運行成功與否系統都不會作任何提示)

wKioL1fkmp2D4WanAAANpm7CkOc487.png

顯示所有單元狀態

        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 –type=service –all

查看服務單元的啟用和禁用狀態。

        systemctl list-unit-files –type=service

列出失敗的服務

        –failed –type=service

wKioL1fkmuezgx6mAAAY2cl6Cm8249.png

列出依賴的單元

        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


總結:

    systemctl結合了系統服務的所有命令,命令之龐大,初學者不容易記住,但是有tab鍵補全

wKioL1fkmxDQIWbCAABXXpITyiM582.png



運行級別

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 graphical.target

級別切換: init N ==> systemctl isolate name.target

        systemctl isolate multi-user.target

        注: 只有/lib/systemd/system/*.target文件中

        AllowIsolate=yes 才能切換(修改文件需執行systemctl daemonreload才能生效)

wKiom1fkmz3An8ALAABQLEzv9eM983.png

查看target:

        runlevel who -r

        systemctl list-units –type target

獲取默認運行級別:

        /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的軟鏈接/usr/lib/systemd/system

wKioL1fkm4zTyZEpAAAYN60-D1I693.png

        關機: 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文件格式

/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“命令在實現服務啟用或禁用時用到的一些選項

各類型段詳解:

wKioL1fkm6ziKQZSAABozlpXKdE078.png

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 /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 支持更多的功能,例如日志等


啟動排錯

文件系統損壞

先嘗試自動修復,失敗則進入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  #由于系統還沒有啟動,selinux策略不會起作用,通過passwd修改密碼也會講passwd文件的標簽修改了,所以需要重新自動打標簽


修復GRUB2(在centos 7 中使用的是grub2)

GRUB“ the Grand Unified Bootloader”引導提示時可以使用命令行界面可從文件系統引導

主要配置文件 /boot/grub2/grub.cfg

wKiom1fknBKhaTAuAAAbWF8hUjo016.png

雖說是主要配置文件,但是系統默認建議不要修改,也同時提示該文件是由/etc/grub.d  /etc/default/grub   這兩個文件為模板生成的,可以修改這兩個模板然后運行grub2-mkconfig -o 命令來生成該文件。一般修改/etc/default/grub該文件

wKiom1fknEnjc7r6AAAprsvx918427.png

修復配置文件grub2-mkconfig > /boot/grub2/grub.cfg  或者  grub2-mkconfig -o

 

    修復grub

        grub2-install /dev/sda BIOS環境

        grub2-install UEFI環境

原創文章,作者:hunter,如若轉載,請注明出處:http://www.www58058.com/48674

(0)
hunterhunter
上一篇 2016-09-23
下一篇 2016-09-23

相關推薦

  • linux函數和數組定義

    函數介紹:    函數function 是由若干條shell 命令組成的語句塊,實現代碼重用和模塊化編程。    它與shell 程序形式上是相似的,不同的是它不是一個單獨的進程,不能獨立運行,而是shell 程序的一部分。    函數和shell 程序比較相似,區別在于:   …

    Linux干貨 2017-04-02
  • 軟件包管理–rpm、yum

    rpm軟件包管理,rpm命令的使用。yum命令使用,yum源的搭建,網絡yum源的搭建方法。編譯安裝http

    Linux干貨 2017-12-03
  • 第十五周作業

    1、總結sed和awk的詳細用法; sed:     模式空間:sed是一種在線編輯器、行編輯器,一次處理一行內容,在處理時,把當前處理的行存儲在臨時緩沖區當中,并在該緩沖區中完成后續的處理,該緩沖區被稱為”模式空間”。     保持空間:在模式空間中處理完一行內容后會繼續處理下一行,但是對于處…

    Linux干貨 2017-04-18
  • Linux的哲學思想

    Linux的哲學思想 一切皆文件  幾乎把所有的資源系統抽象為文件形式:包括硬件設備,甚至通信接口等 由眾多功能單一的程序組成:一個程序只做一件事,并且做好;組合小程序完成復雜任務  力求使程序精簡凝練,出現地完成最核心的需求;盡量避免使其膨脹成為一個臃腫的程序,致使大部分代碼很少被需要和執行。 小程序易于理解,維護,消耗系統資源較少,易…

    Linux干貨 2017-07-03
  • Linux find命令使用詳則

    find命令 find命令用來在指定目錄下查找文件。任何位于參數之前的字符串都將被視為欲查找的目錄名。如果使用該命令時,不設置任何參數,則find命令將在當前目錄下查找子目錄欲文件。并且將查找到的子目錄和文件全部進行顯示。 語法 find(選項)(參數) 選項 -amin<分鐘>:查找在指定時間曾被存取過的文件或者目錄,單位以分鐘計算; -ane…

    2017-08-03
  • LVM應用

    1、創建一個2G的文件系統,塊大小為2048byte,預留1%可用空間,文件系統ext4,卷標為TEST,要求此分區開機后自動掛載至/test目錄,且默認有acl掛載選項 ·首先在虛擬機當中添加指定大小的硬盤,添加完成后,系統不會自動掃描添加的硬盤設備,鍵入命令重新掃描SCSI總線來添加設備   echo "- – -&quo…

    Linux干貨 2016-08-30

評論列表(1條)

  • 馬哥教育
    馬哥教育 2016-09-23 11:22

    寫的不錯,內容很詳細,也有相應的實例展示。

欧美性久久久久