Systemd——CentOS7的init

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

666.png

重載配置文件:# systemctl daemod-reload

啟動服務,查看端口,并訪問網頁

Systemd——CentOS7的init

Systemd——CentOS7的init

Systemd——CentOS7的init

Systemd——CentOS7的init

關閉服務,查看端口情況

Systemd——CentOS7的init

Systemd——CentOS7的init

2、破解centos7口令

啟動時任意鍵暫停啟動

按e鍵進入編輯模式

將光標移動linux16 開始的行,添加內核參數rd.break

按ctrl+x 啟動

mount –o remount,rw /sysroot

chroot /sysroot

passwd root

touch /.autorelabel

3、修改默認的啟動內核

# vim /etc/default/grub

1001.png

# 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

(0)
megedugaomegedugao
上一篇 2016-09-20 20:41
下一篇 2016-09-20 22:49

相關推薦

  • 詳解用戶,組,權限管理

    詳解用戶,組,權限管理 M21-陸東貴 測試環境:CentOS 7.2 內容介紹: 我們要使用操作系統進行工作,就需要人機交互操作,這時候計算機就需要創建用戶,通過用戶來實現操作,而且隨著用戶的增加需要給用戶分組,這時候就需要對文件進行權限管理。 需要使用的工具:       用戶相關工具:useradd; …

    Linux干貨 2016-10-25
  • Btrfs文件系統的管理

    BTRFS文件系統 核心特性 支持將多個底層物理設備組合成同一個設備使用,即多物理卷支持。btrfs可由多個底層物理卷組成:支持RAID,以連擊“添加”、“移除”、“修改” 寫時復制,在修改文件時,先將文件復制一份,然后在新文件上進行修改,最后將文件名的指針指向新文件,所以原文件還是存在的。 數據及元數據校驗碼:checksum 子卷:在一個卷上創建子卷,每…

    Linux干貨 2016-07-16
  • grep與文本處理工具

    grep:基本正則表達式,-E  -F egrep:擴展正則表達式,-G -F fgrep: 不支持正則表達式,-F  egrep:          支持擴展的正則表達式實現類似于grep文本過濾功能; grep -E          …

    Linux干貨 2016-12-23
  • 網卡別名的設置

    網卡別名的設置 設備網卡別名對虛擬主機的作用 可以將多個IP地址綁定到一個NIC上 eth0:1 eth0:2 eth0:3 ifconfig命令: 使用ipconfig命令來設置網卡別名 ifconfigeth0:0 192.168.1.100/24 up 使用ip命令來設置網卡別名 ipaddradd 172.16.1.2/…

    Linux干貨 2016-09-06
  • M20 – 1- 第二周博客(1):幫助手冊查詢的使用

    Linux系統中存在諸多的命令,而這些命令分為內鍵命令和外部命令。如何查詢命令屬于內部還是外部呢。前一篇博客已經介紹type命令,type命令可以區分命令屬于內部還是外部,下面舉個例子: 為什么這一期博客還重復講如何區分內部與外部命令呢,因為在man手冊查詢中,內部命令并不是使用man查詢幫助手冊,僅僅使用與外部命令,那內鍵命令如何查詢呢,接下來要講的就是h…

    Linux干貨 2016-08-02
  • Linux文件權限管理-2016-8-04

    Linux文件權限管理 學習大綱 一 關于文件和目錄的權限基本概述(rwx); 二 針對文件或目錄權限管理的命令: a) 相關命令:chown , chgrp ,chmod chown修改文件屬主 和 屬組 語法:chown  [OPTION]…  [OWNER][:[GROUP]]  FILE&#8230…

    Linux干貨 2016-08-04
欧美性久久久久