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