Linux系统启动流程及服务管理控制
系統(tǒng)啟動與服務(wù)管理
- 一、系統(tǒng)啟動
- 二、systemd服務(wù)管理
一、系統(tǒng)啟動
1.開機自檢BIOS
(Basic Input Output System基本輸入輸出系統(tǒng))
加電自檢、檢測硬件、決定啟動介質(zhì)、找到引導(dǎo)扇區(qū)。
2.MBR引導(dǎo)
讀取并且執(zhí)行第一個開機設(shè)備中的MBR(Master Boot Record主引導(dǎo)記錄)的bootloader(grub程序:Grand unified bootloader大統(tǒng)一啟動加載器)。
3.加載內(nèi)核
依據(jù)bootloader設(shè)置去加載內(nèi)核,內(nèi)核開始偵測硬件并加載驅(qū)動程序。
boot loader主要功能
內(nèi)核在Linux中的存放位置為/boot分區(qū)下,主要有2個文件要被加載。
vmlinuz-3.10.0-514.el7.x86_64 內(nèi)核文件initramfs-3.10.0-514.el7.x86_64.img 虛擬文件系統(tǒng)使用lsinitrd命令查看虛擬文件系統(tǒng)。
[root@localhost ~]# lsinitrd Image: /boot/initramfs-3.10.0-1160.6.1.el7.x86_64.img: 21M ======================================================================== Early CPIO image ======================================================================== drwxr-xr-x 3 root root 0 Nov 19 13:50 . -rw-r--r-- 1 root root 2 Nov 19 13:50 early_cpio drwxr-xr-x 3 root root 0 Nov 19 13:50 kernel drwxr-xr-x 3 root root 0 Nov 19 13:50 kernel/x86 drwxr-xr-x 2 root root 0 Nov 19 13:50 kernel/x86/microcode -rw-r--r-- 1 root root 25600 Nov 19 13:50 kernel/x86/microcode/GenuineIntel.bin ======================================================================== Version: dracut-033-564.el7 ...GRUB2相較于GRUB一代的提升:更健壯、可移植、更強大。支持BIOS、EFI和OpenFirmware,支持GPT和MBR分區(qū)表。支持非Linux系統(tǒng),如蘋果HFS文件系統(tǒng)和Windows的NTFS文件系統(tǒng)。
4.如果是sysvinit啟動程序(linux6版本)
5.如果是systemd啟動程序(Linux7版本)
6.Init和Systemd的區(qū)別
systemd是linux系統(tǒng)中最新的初始化系統(tǒng)(init),它主要的設(shè)計目標(biāo)是克服sysvinit固有的缺點,提高系統(tǒng)的啟動速度。
Init
對于支持service的程序,安裝時會自動在/etc/init.d目錄添加一個配置文件。當(dāng)使用service控制程序時,比如執(zhí)行開啟httpd服務(wù):service httpd start。那么service就會開啟/etc/init.d/httpd配置文件里面指向的/usr/sbin/httpd可執(zhí)行文件。
systemd
對于支持systemd的程序,安裝時會自動在/usr/lib/systemd/system目錄添加一個配置文件。當(dāng)使用systemctl控制該程序時,比如執(zhí)行開啟httpd服務(wù):systemctl start httpd。那么systemctl就會開啟httpd.service配置里面指向的/usr/sbin/httpd可執(zhí)行文件。
如果想讓該程序開機啟動,可以執(zhí)行命令systemctl enable httpd,這個命令相當(dāng)于在/etc/systemd/system目錄添加一個軟鏈接,指向/usr/lib/systemd/system目錄下的httpd.service文件。這是因為開機時,systemd只執(zhí)行/etc/systemd/system目錄里面的配置文件。
7.配置文件的區(qū)別
init進程的配置文件
| /etc/init.d/ | 服務(wù)啟動腳本配置文件存放目錄 |
| /etc/inittab | 默認運行級別配置文件 |
| /etc/init/rcS.conf | 系統(tǒng)初始化配置文件 |
| /etc/init/rc.conf | 各運行級別初始化的配置文件 |
| /etc/init/rcS-sulogin.conf | 單用戶模式啟動/sbin/sushell環(huán)境的配置文件 |
| /etc/init/control-altdelete.conf | 終端下的ctrl+alt+del熱鍵操作的配置文件 |
| /etc/sysconfig/init | tty終端的配置文件 |
| /etc/init/start-ttys.conf | 配置tty終端的開啟數(shù)量、設(shè)備文件 |
| /etc/init/tty.conf或/etc/init/serial.conf | 控制tty終端的開啟 |
systemd進程的配置文件
| /etc/systemd/system/default.target | 取代/etc/inittab文件配置,通常符號鏈接到/lib/systemd/system/graphical.target |
| /run/systemd/system/ | 系統(tǒng)執(zhí)行過程中所產(chǎn)生的服務(wù)腳本所在目錄 |
| /etc/systemd/system/ | 里面存放著不同級別的開機自啟服務(wù) |
| /usr/lib/systemd/system/和/lib/systemd/system/ | 兩個文件完全一樣,因為/lib是/usr/lib的軟鏈接。每個服務(wù)最主要的啟動腳本設(shè)置,類似于之前的/etc/init.d/ |
8.運行級別和說明
| 0 | 關(guān)機狀態(tài),使用該級別將會關(guān)機 | rehl6/7命令:init 0----rhel命令:poweroff |
| 1 | 系統(tǒng)救援模式,多用于系統(tǒng)維護 | rehl6/7命令:init 1----rhel命令:systemctl isolate rescue.target |
| 2 | 字符界面的多用戶模式(不可訪問網(wǎng)絡(luò)) | rehl6/7命令:init 2----rhel命令:systemctl isolate mutil-user.target |
| 3 | 字符界面的完整多用戶模式,大多數(shù)服務(wù)器主機運行此級別 | rehl6/7命令:init 3----rhel命令:systemctl isolate mutil-user.target |
| 4 | 未分配使用 | rehl6/7命令:init 4----rhel命令:systemctl isolate mutil-user.target |
| 5 | 圖形界面的多用戶模式,提供了圖形桌面操作環(huán)境 | rehl6/7命令:init 5----rhel命令:systemctl isolate graphical.target |
| 6 | 重新啟動主機 | rehl6/7命令:init 6----rhel命令:reboot |
9.查看運行級別
(1)runlevel
顯示切換前的運行級別和當(dāng)前運行級別(6/7)。
(2)systemctl get-default
顯示當(dāng)前運行級別(7)
10.永久設(shè)置開機模式
systemctl set-default multi-user.target #開機默認為文本模式systemctl set-default graphical.target #開機默認為圖形模式修改/etc/inittab默認運行級別配置文件二、systemd服務(wù)管理
1.單元(unit)的概念
系統(tǒng)初始化需要做的事情非常多。需要啟動后臺服務(wù),比如啟動SSHD服務(wù);需要做配置工作,比如掛載文件系統(tǒng)。這個過程中的每一步都被systemd抽象為一個配置單元。可以認為一個服務(wù)是一個配置單元;一個掛載點是一個配置單元;一個交換分區(qū)的配置是一個配置單元等。
| Service unit | 系統(tǒng)服務(wù),最常見的類型 |
| Target unit | 多個Unit構(gòu)成的一個組,執(zhí)行環(huán)境類型 |
| Device Unit | 硬件設(shè)備 |
| Mount Unit | 文件系統(tǒng)的掛載點 |
| Automount Unit | 自動掛載點 |
| Path Unit | 偵測特定文件或目錄類型的 |
| Scope Unit | 不是由Systemd啟動的外部進程 |
| Slice Unit | 進程組 |
| Snapshot Unit | Systemd快照,可以切回某個快照 |
| Socket Unit | 進程間通信的socket服務(wù) |
| Swap Unit | swap文件 |
| Timer Unit | 循環(huán)執(zhí)行的服務(wù) |
2.Target和運行級別
systemd用target替代了運行級別的概念,提供了更大的靈活性。比如你可以繼承一個已有的目標(biāo),并添加其它服務(wù)來創(chuàng)建自己的目標(biāo)。
下表列舉了systemd下的目標(biāo)和常見runlevel的對應(yīng)關(guān)系。
| 0 | runlevel0.target,poweroff.target | 關(guān)閉系統(tǒng) |
| 1,s,single | runlevel1.target,rescue.target | 單用戶模式 |
| 2,4 | runlevel2.target,runlevel4.target,multi-user.target | 用戶定義/域特定運行級別。默認等同于3。 |
| 3 | runlevel3.target,multi-user.target | 多用戶,非圖形化。用戶可以通過多個控制臺或網(wǎng)絡(luò)登錄。 |
| 5 | runlevel5.target,graphical.target | 多用戶,圖形化。通常為所有運行級別3的服務(wù)外加圖形化登錄。 |
| 6 | runlevel6.target,reboot.target | 重啟 |
| emergency | emergency.target | 緊急shell |
3.systemctl管理服務(wù)
RHEL7監(jiān)視和控制systemd的主要命令是systemctl,該命令可以用于查看系統(tǒng)狀態(tài)和管理系統(tǒng)及服務(wù)。
| systemctl start <單元> | 立即啟動單元 |
| systemctl stop <單元> | 立即停止單元 |
| systemctl restart <單元> | 重啟單元 |
| systemctl reload <單元> | 重新讀取單元配置 |
| systemctl status <單元> | 輸出單元運行狀態(tài) |
| systemctl is-enabled <單元> | 檢查單元是否配置為自動啟動 |
| systemctl enable <單元> | 開機自動啟動單元 |
| systemctl disable <單元> | 取消開機自動激活單元 |
| systemctl is-active <單元> | 查看單元是不是正在運行 |
| systemctl is-failed <單元> | 查看單元是否處于啟動失敗狀態(tài) |
| systemctl kill <單元> | 殺死單元的所有子進程 |
| systemctl daemon-reload | 重新載入systemd,掃描新的或有變動的單元 |
RHEL7的服務(wù)systemctl腳本存放在:/usr/lib/systemd/目錄,有系統(tǒng)(system)和用戶(user)之分,像需要開機不登陸就能運行的程序存在系統(tǒng)服務(wù)里,即/usr/lib/systemd/system目錄下。
4.服務(wù)組成介紹
每一個服務(wù)以.service結(jié)尾,一般會分為3部分:[Unit]、[Service]和[Install],每個部分內(nèi)部是一些等號連接的鍵值對,注意鍵值對的等號兩側(cè)不能有空格。
[Unit]
通常是配置文件的第一個區(qū)塊,用來定義Unit的元數(shù)據(jù)以及配置與其他Unit的關(guān)系。
主要字段如下:
[Service]
是服務(wù)的關(guān)鍵,是服務(wù)的一些具體運行參數(shù)的設(shè)置,只有Service類型的Unit才有這個區(qū)塊。
它的主要字段如下:
Type:定義啟動時的進程行為。
它有以下幾種值:
[Install]
通常是配置文件的最后一個區(qū)塊,用來定義如何啟動以及是否開機啟動。
它的主要字段如下:
注意:如果服務(wù)沒有Install段落,一般意味著應(yīng)該通過其它服務(wù)自動調(diào)用它們。
5.target簡介
簡單來說,Target就是一個Unit組,包含許多相關(guān)的Unit。啟動某個Target時,Systemd就會啟動里面所有的Unit。從這個意義上說,Target這個概念類似于"狀態(tài)點",啟動某個Target就好比啟動到某種狀態(tài)。
傳統(tǒng)的init啟動模式里面有RunLevel的概念,跟Target的作用很類似。
不同的是,RunLevel是互斥的,不可能多個RunLevel同時啟動,但是多個Target可以同時啟動。
(1)查看當(dāng)前系統(tǒng)的所有Target
(2)查看一個Target包含的所有Unit
$ systemctl list-dependencies multi-user.target(3)查看啟動時的默認Target
$ systemctl get-default(4)設(shè)置啟動時的默認Target
$ sudo systemctl set-default multi-user.target(5)切換Target時,默認不關(guān)閉前一個Target啟動的進程
$ systemctl isolate 命令改變這種行為(6)關(guān)閉前一個Target里面所有不屬于后一個Target的進程
$ sudo systemctl isolate multi-user.target總結(jié)
以上是生活随笔為你收集整理的Linux系统启动流程及服务管理控制的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: pass语句|python
- 下一篇: Linux:配置本地yum源仓库