日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

Linux系统启动流程及服务管理控制

發布時間:2024/1/8 linux 43 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Linux系统启动流程及服务管理控制 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

系統啟動與服務管理

  • 一、系統啟動
    • 二、systemd服務管理

一、系統啟動

1.開機自檢BIOS
(Basic Input Output System基本輸入輸出系統)
加電自檢、檢測硬件、決定啟動介質、找到引導扇區。
2.MBR引導
讀取并且執行第一個開機設備中的MBR(Master Boot Record主引導記錄)的bootloader(grub程序:Grand unified bootloader大統一啟動加載器)。
3.加載內核
依據bootloader設置去加載內核,內核開始偵測硬件并加載驅動程序。
boot loader主要功能

提供選單:用戶可以選擇不同的開機項目載入核心文件:直接指向可開機的程序區域來開始操作系統轉交其他loader:將開機管理功能轉交給其他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版本)

4.內核啟動init進程5.系統初始化6.init找到/etc/inittab文件,決定系統的運行級別(X)7.觸發相應的運行級別的事件,運行/etc/rcX.d下的腳本8.執行/etc/rc.local文件來到登錄界面9.輸入用戶名密碼進入到系統中

5.如果是systemd啟動程序(Linux7版本)

4.在硬件驅動加載成功后,內核會主動呼叫systemd程序,并以default.target流程開機5.systemd執行sysinit.target初始化系統及basic.target準備操作系統6.systemd啟動multi-user.target下的本機與服務器服務7.systemd執行multi-user.target下的/etc/rc.d/rc.local文件8.systemd執行multi-user.target下的getty.target及登錄服務9.systemd執行graphical需要的服務

6.Init和Systemd的區別
systemd是linux系統中最新的初始化系統(init),它主要的設計目標是克服sysvinit固有的缺點,提高系統的啟動速度。
Init

(1)啟動時間長 init是串行啟動,只有前一個進程啟動完才會啟動下一個進程;(2)啟動腳本復雜 init進程只是執行啟動腳本,不管其他事情,腳本需要自己處理各種情況,這往往使得腳本變得很長;(3)由Linux內核加載運行 位于/sbin/init,是系統中第一個進程,PID永遠為1;

對于支持service的程序,安裝時會自動在/etc/init.d目錄添加一個配置文件。當使用service控制程序時,比如執行開啟httpd服務:service httpd start。那么service就會開啟/etc/init.d/httpd配置文件里面指向的/usr/sbin/httpd可執行文件。
systemd

(1)按需啟動服務,減少系統資源消耗;(2)盡可能并行啟動進程,減少系統啟動等待時間;(3)由Linx內核加載運行 位于/usr/lib/systemd/systemd,是系統中第一個進程,PID永遠為1。

對于支持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/inittty終端的配置文件
/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)。

[root@localhost ~]# runlevel N 3

(2)systemctl get-default
顯示當前運行級別(7)

[root@localhost ~]# systemctl get-default multi-user.target

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 UnitSystemd快照,可以切回某個快照
Socket Unit進程間通信的socket服務
Swap Unitswap文件
Timer Unit循環執行的服務

2.Target和運行級別
systemd用target替代了運行級別的概念,提供了更大的靈活性。比如你可以繼承一個已有的目標,并添加其它服務來創建自己的目標。
下表列舉了systemd下的目標和常見runlevel的對應關系。

sysvinit運行級別systemd目標備注
0runlevel0.target,poweroff.target關閉系統
1,s,singlerunlevel1.target,rescue.target單用戶模式
2,4runlevel2.target,runlevel4.target,multi-user.target用戶定義/域特定運行級別。默認等同于3。
3runlevel3.target,multi-user.target多用戶,非圖形化。用戶可以通過多個控制臺或網絡登錄。
5runlevel5.target,graphical.target多用戶,圖形化。通常為所有運行級別3的服務外加圖形化登錄。
6runlevel6.target,reboot.target重啟
emergencyemergency.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],每個部分內部是一些等號連接的鍵值對,注意鍵值對的等號兩側不能有空格。

[root@localhost ~]# cat /usr/lib/systemd/system/sshd.service [Unit] Description=OpenSSH server daemon Documentation=man:sshd(8) man:sshd_config(5) After=network.target sshd-keygen.service Wants=sshd-keygen.service[Service] Type=notify EnvironmentFile=/etc/sysconfig/sshd ExecStart=/usr/sbin/sshd -D $OPTIONS ExecReload=/bin/kill -HUP $MAINPID KillMode=process Restart=on-failure RestartSec=42s[Install] WantedBy=multi-user.target

[Unit]
通常是配置文件的第一個區塊,用來定義Unit的元數據以及配置與其他Unit的關系。
主要字段如下:

Description:簡短描述Documentation:文檔地址Requires:當前Unit依賴的其他Unit,如果它們沒有運行,當前Unit會啟動失敗Wants:與當前Unit配合的其他Unit,如果它們沒有運行,當前Unit不會啟動失敗BindsTo:與Requires類似,它指定的Unit如果退出,會導致當前Unit停止運行Before:如果該字段指定的Unit也要啟動,那么必須在當前Unit之后啟動After:如果該字段指定的Unit也要啟動,那么必須在當前Unit之前啟動Conflicts:這里指定的Unit不能與當前Unit同時運行Condition...:當前Unit運行必須滿足的條件,否則不會運行Assert...:當前Unit運行必須滿足的條件,否則會報啟動失敗

[Service]
是服務的關鍵,是服務的一些具體運行參數的設置,只有Service類型的Unit才有這個區塊。
它的主要字段如下:
Type:定義啟動時的進程行為。
它有以下幾種值:

Type=simple:默認值,執行ExecStart指定的命令,啟動主進程Type=forking:以fork方式從父進程創建子進程,創建后父進程會立即退出Type=oneshot:一次性進程,Systemd會等當前服務退出再繼續往下執行Type=dbus:當前服務通過D-Bus啟動Type=notify:當前服務啟動完畢會通知Systemd,再繼續往下執行Type=idle:若有其他任務執行完畢,當前服務才會運行ExecStart:啟動當前服務的命令ExecStartPre:啟動當前服務之前執行的命令ExecStartPost:啟動當前服務之后執行的命令ExecReload:重啟當前服務時執行的命令KillModecontrol-group(默認值):當前控制組里面的所有子進程都會被殺掉process:只殺主進程mixed:主進程將收到SIGTERM信號,子進程收到SIGKILL信號none:沒有進程會被殺掉,只是執行服務的stop命令ExecStop:停止當前服務時執行的命令ExecStopPost:停止當前服務之后執行的命令RestartSec:自動重啟當前服務間隔的秒數Restart:定義何種情況Systemd會自動重啟當前服務,可能的值包括always(總是重啟)、on-success、on-failure、on-abnormal、on-abort、on-watchdogTimeoutSec:定義Systemd停止當前服務之前等待的秒數Environment:指定環境變量

[Install]
通常是配置文件的最后一個區塊,用來定義如何啟動以及是否開機啟動。
它的主要字段如下:

WantedBy:它的值是一個或多個Target,當前Unit激活時(enable),符號鏈接會放入/etc/systemd/system目錄下面以Target名+.wants后綴構成的子目錄中RequiredBy:它的值是一個或多個Target,當前Unit激活時,符號鏈接會放入/etc/systemd/system目錄下面以Target名+.required后綴構成的子目錄中Alias:當前Unit可用于啟動的別名Also:當前Unit激活(enable)時,會被同時激活的其他Unit

注意:如果服務沒有Install段落,一般意味著應該通過其它服務自動調用它們。
5.target簡介
簡單來說,Target就是一個Unit組,包含許多相關的Unit。啟動某個Target時,Systemd就會啟動里面所有的Unit。從這個意義上說,Target這個概念類似于"狀態點",啟動某個Target就好比啟動到某種狀態。
傳統的init啟動模式里面有RunLevel的概念,跟Target的作用很類似。
不同的是,RunLevel是互斥的,不可能多個RunLevel同時啟動,但是多個Target可以同時啟動。
(1)查看當前系統的所有Target

$ systemctl list-unit-files --type=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系统启动流程及服务管理控制的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。