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

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

查看各服務(wù)開機(jī)自啟情況
systemctl list-unit-files --type=service

獲取服務(wù)的依賴項(xiàng)列表
systemctl list-dependencies httpd.service

按層次列出控制組
systemd-cgls

根據(jù)CPU,內(nèi)存,輸入和輸出列出控制組
systemd-cgtop

分析每個(gè)進(jìn)程在引導(dǎo)時(shí)花費(fèi)的時(shí)間
systemd-analyze blame

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

套接字的操作
systemctl start cups.socket #啟動(dòng)套接字 systemctl restart cups.socket #重啟套接字 systemctl stop cups.socket #停止套接字 systemctl reload cups.socket #重新加載套接字 systemctl status cups.socket #查看套接字狀態(tài) systemctl is-active cups.socket systemctl enable cups.socket systemctl disable cups.socket
其他命令
systemctl mask httpd.service #禁用某個(gè)服務(wù) systemctl unmask httpd.service #解除禁用某個(gè)服務(wù) systemctl isolate multi-user.target #將目前的操作環(huán)境改為純文本模式,關(guān)掉圖形界面 systemctl isolate graphical.target #將目前的操作環(huán)境改為圖形界面 systemctl poweroff # 系統(tǒng)關(guān)機(jī) systemctl reboot # 重新開機(jī) systemctl suspend # 進(jìn)入暫停模式 systemctl hibernate # 進(jìn)入休眠模式 systemctl rescue # 強(qiáng)制進(jìn)入救援模式 systemctl emergency # 強(qiáng)制進(jìn)入緊急救援模式
鏈接:https://blog.csdn.net/weixin_46622350/article/details/119360481?spm=1001.2014.3001.5502
-
Linux
+關(guān)注
關(guān)注
87文章
11446瀏覽量
212639 -
操作系統(tǒng)
+關(guān)注
關(guān)注
37文章
7059瀏覽量
124875 -
腳本
+關(guān)注
關(guān)注
1文章
396瀏覽量
28327
原文標(biāo)題:Linux運(yùn)維一定要知道的服務(wù)管理!
文章出處:【微信號(hào):magedu-Linux,微信公眾號(hào):馬哥Linux運(yùn)維】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
Linux的內(nèi)存管理是什么,Linux的內(nèi)存管理詳解

ARM嵌入式Linux系統(tǒng)開發(fā)詳解
Linux基礎(chǔ)命令之Linux系統(tǒng)服務(wù)解析
《Linux設(shè)備驅(qū)動(dòng)開發(fā)詳解》第9章、Linux設(shè)備驅(qū)動(dòng)中的異步通知與異步IO

《Linux設(shè)備驅(qū)動(dòng)開發(fā)詳解》第8章、Linux設(shè)備驅(qū)動(dòng)中的阻塞與非阻塞IO

《Linux設(shè)備驅(qū)動(dòng)開發(fā)詳解》第7章、Linux設(shè)備驅(qū)動(dòng)中的并發(fā)控制

《Linux設(shè)備驅(qū)動(dòng)開發(fā)詳解》第5章、Linux文件系統(tǒng)與設(shè)備文件系統(tǒng)

評(píng)論