Linux運維一定要知道的服務管理!
簡介
在Linux中,無論何時當你安裝任何帶有服務和守護進程的包,系統默認會把這些服務的初始化及systemd腳本添加進去,不過此時它們并沒有被啟用。
我們需要手動的開啟或者關閉那些服務。Linux中有三個著名的且一直在被使用的初始化系統。
在以Linux/Unix為基礎的操作系統上,init(初始化的簡稱) 是內核引導系統啟動過程中第一個啟動的進程。
init的進程id (pid)是1,除非系統關機否則它將會一直在后臺運行。
init首先根據/etc/inittab文件決定Linux運行的級別,然后根據運行級別在后臺啟動所有其他進程和應用程序。
BIOS、MBR、GRUB和內核程序在啟動init之前就作為Linux的引導程序的一部分開始工作了。
下面是Linux中可以使用的運行級別(從0~6總共七個運行級別):
? 0:關機
? 1:單用戶模式
? 2:多用戶模式(沒有NFS)
? 3:完全的多用戶模式
? 4:系統未使用
? 5:圖形界面模式
? 6:重啟
初始化系統
下面是 Linux 系統中最常用的三個初始化系統:
?System V(Sys V)
?Upstart
?systemd
System V(Sys V)
System V(Sys V)是類Unix系統第一個也是傳統的初始化系統。init是內核引導系統啟動過程中第一支啟動的程序,它是所有程序的父進程。
大部分Linux發行版最開始使用的是叫作System V(Sys V)的傳統的初始化系統。在過去的幾年中,已經發布了好幾個初始化系統以解決標準版本中的設計限制,例如:launchd、Service Management Facility、systemd和Upstart。
但是systemd已經被幾個主要的Linux發行版所采用,以取代傳統的SysV初始化系統。
Upstart
Upstart是一個基于事件的/sbin/init守護進程的替代品,它在系統啟動過程中處理任務和服務的啟動,在系統運行期間監視它們,在系統關機的時候關閉它們。
它最初是為Ubuntu而設計,但是它也能夠完美的部署在其他所有Linux系統中,用來代替古老的System-V。
Upstart被用于Ubuntu 9.10到Ubuntu 14.10和基于RHEL 6的系統,之后它被systemd取代。
systemd
systemd是一個新的初始化系統和系統管理器,它被用于所有主要的Linux發行版,以取代傳統的SysV初始化系統。
systemd兼容SysV和LSB初始化腳本。它可以直接替代SysV初始化系統。systemd是被內核啟動的第一個程序,它的PID是1。
systemd是所有程序的父進程,Fedora 15是第一個用systemd取代upstart的發行版。systemctl用于命令行,它是管理systemd的守護進程/服務的主要工具,例如:(開啟、重啟、關閉、啟用、禁用、重載和狀態)
systemd使用.service文件而不是bash腳本(SysVinit 使用的)。systemd將所有守護進程添加到cgroups中排序,你可以通過瀏覽/cgroup/systemd文件查看系統等級。
service
service命令,顧名思義,就是用于管理Linux操作系統中服務的命令。
這個命令不是在所有的linux發行版本中都有。主要是在redhat、fedora、mandriva和centos中。
查看所有服務當前的運行狀態 service --status-all 查看指定服務(vsftpd)的運行狀態 service vsftpd status 停止指定服務(vsftpd) service vsftpd stop 重啟網絡服務 service network restart
chkconfig
chkconfig實用程序是一個命令行工具,允許你在指定運行級別下啟動所選服務,以及列出所有可用服務及其當前設置。
此外,它還允許我們從啟動中啟用或禁用服務。前提是你有超級管理員權限(root或者sudo)運行這個命令。
所有的服務腳本位于/etc/init.d文件中
image-20210803160510022
image-20210803153702926
設定mysqld在等級3和5為開機運行服務,--level 35表示操作只在等級3和5執行,on表示啟動,off表示關閉 chkconfig --level 35 mysqld on 設定mysqld在各等級為on,“各等級”包括2、3、4、5等級 chkconfig mysqld on 修改服務的默認啟動等級 chkconfig --level 35 mysqld on
systemctl
概念
systemd核心概念unit(單元)類型:unit表示不同類型的systemd對象,通過配置文件進行標識和配置;
文件中主要包含了系統服務、監聽socket、保存的系統快照以及其它與init相關的信息
下面為unit類型 :
?service:文件擴展名為.service, 用于定義系統服務
?target:文件擴展名為.target,用于模擬實現運行級別
?device:用于定義內核識別的設備
?mount:定義文件系統掛載點
?socket:用于標識進程間通信用的socket文件,也可在系統啟動時,延遲啟動服務,實現按需啟動
?snapshot:管理系統快照
?swap:用于標識swap設備
?automount:文件系統的自動掛載點
?path:用于定義文件系統中的一個文件或目錄使用,常用于當文件系統變化時,延遲激活服務
么如何查看這些類型呢?
可以使用-t加上類型去查看,以service為例
ststemctl -t service

systemd的配置文件目錄
?/usr/lib/systemd/system/:每個服務最主要的啟動腳本的配置放在這,有點類似以前的/etc/init.d;
image-20210803213413975
?/run/systemd/system/:系統執行過程中所產生的服務腳本所在目錄,這些腳本的優先級要比/usr/lib/systemd/system/高;
image-20210803213505374
?/etc/systemd/system/:管理員根據主機系統的需求所創建的執行腳本所在目錄,執行優先級比/run/systemd/system/高;
image-20210803213309938
從上面的功能及優先級次序,我們可以知道,/etc/systemd/system/目錄下的相關配置,決定系統了會不會執行某些服務,所以該目錄下面一般放著一大堆鏈接文件。而/usr/lib/systemd/system/下,則放著實際執行的systemd啟動腳本配置文件。因此如果你想要修改某個服務啟動的設置,應該去/usr/lib/systemd/system/下面修改。/etc/systemd/system/僅是鏈接到正確的執行腳本配置文件而已。所以想要看執行腳本設置,應該就得要到/usr/lib/systemd/system/去查閱。
常用命令
任務 | 舊指令 | 新指令 |
使某服務自動啟動 | chkconfig --level 3 httpd on | systemctl enable httpd.service |
使某服務不自動啟動 | chkconfig --level 3 httpd off | systemctl disable httpd.service |
檢查服務狀態 | service httpd status | systemctl status httpd.service (服務詳細信息) systemctl is-active httpd.service (僅顯示是否 Active) |
顯示所有已啟動的服務 | chkconfig --list | systemctl list-units --type=service |
啟動某服務 | service httpd start | systemctl start httpd.service |
停止某服務 | service httpd stop | systemctl stop httpd.service |
重啟某服務 | service httpd restart | systemctl restart httpd.service |
查看服務狀態
systemctl status httpd
運行狀態:
?active(running):正有一只或多只程序正在系統中執行的意思;
?active(exited):僅執行一次就正常結束的服務,目前并沒有任何程序在系統中執行;
?active(waiting):正在執行當中,不過還需要等待其他的事件才能繼續處理;
?inactive:這個服務目前沒有運行;
?dead:程序已經清除;
啟動狀態:
?enabled:這個daemon將在開機時被執行;
?disabled:這個daemon在開機時不會被執行;
?static:這個daemon不可以自己啟動(enable不可),不過可能會被其他的enabled的服務來喚醒(關聯屬性的服務);
?mask:這個daemon無論如何都無法被啟動,因為已經被強制注銷(非刪除),可通過systemctlunmask方式改回原本狀態;
image-20210803213938487
檢查服務的所有配置詳細信息
systemctl show httpd

查看各服務開機自啟情況
systemctl list-unit-files --type=service

獲取服務的依賴項列表
systemctl list-dependencies httpd.service

按層次列出控制組
systemd-cgls

根據CPU,內存,輸入和輸出列出控制組
systemd-cgtop

分析每個進程在引導時花費的時間
systemd-analyze blame

列出所有可用的系統套接字
systemctl list-unit-files --type=socket

套接字的操作
systemctl start cups.socket #啟動套接字 systemctl restart cups.socket #重啟套接字 systemctl stop cups.socket #停止套接字 systemctl reload cups.socket #重新加載套接字 systemctl status cups.socket #查看套接字狀態 systemctl is-active cups.socket systemctl enable cups.socket systemctl disable cups.socket
其他命令
systemctl mask httpd.service #禁用某個服務 systemctl unmask httpd.service #解除禁用某個服務 systemctl isolate multi-user.target #將目前的操作環境改為純文本模式,關掉圖形界面 systemctl isolate graphical.target #將目前的操作環境改為圖形界面 systemctl poweroff # 系統關機 systemctl reboot # 重新開機 systemctl suspend # 進入暫停模式 systemctl hibernate # 進入休眠模式 systemctl rescue # 強制進入救援模式 systemctl emergency # 強制進入緊急救援模式
鏈接:https://blog.csdn.net/weixin_46622350/article/details/119360481?spm=1001.2014.3001.5502
-
Linux
+關注
關注
87文章
11469瀏覽量
212958 -
操作系統
+關注
關注
37文章
7103瀏覽量
125067 -
腳本
+關注
關注
1文章
397瀏覽量
28370
原文標題:Linux運維一定要知道的服務管理!
文章出處:【微信號:magedu-Linux,微信公眾號:馬哥Linux運維】歡迎添加關注!文章轉載請注明出處。
發布評論請先 登錄
《Linux設備驅動開發詳解》第9章、Linux設備驅動中的異步通知與異步IO

評論