我們經常會聽到服務service以及daemon這兩個詞,它們到底是什么意思呢?之間有什么區別和聯系嗎。linux下的服務service是常駐在內存中的程序,并且能夠提供一些系統或網絡方面的功能。而daemon從字面翻譯是守護進程或后臺進程的意思。所以阿,service和daemon你可以將它們看成是一個東西,不用去區分它們。
早期init管理機制
centOS6的時候,還是采用init的服務管理機制。這里稍微介紹下,因為有些東西在centOS7中還是可以使用的。主要看下面幾個特點:
服務的啟動、關閉以及狀態查看等
-
啟動服務: /etc/init.d/nginx start
-
重啟服務: /etc/init.d/nginx restart
-
關閉服務: /etc/init.d/nginx stop
-
狀態查看: /etc/init.d/nginx status
服務啟動方式
-
獨立啟動:大部分的服務都是采用該模式,比如常見的mysqld、php-fpm、nginx、httpd等服務。
-
被super daemon托管啟動:這些服務的啟動是由另一個服務來托管,托管這些服務的服務我們成為super daemon,常見的supuer daemon有inetd、xinetd
執行等級
linux上有7個執行等級,分別是0、1、2、3、4、5、6。常用的有
-
1單人維護模式
-
3純文本模式
-
5圖形模式
各個執行等級的啟動腳本是通過/etc/rc[0-6].d/SNNdaemon鏈接到/etc/init.d/daemon。
ll?/etc/rc3.d/S55nginx? lrwxrwxrwx?1?root?root?15?Sep?21?11:30?/etc/rc3.d/S55nginx?->?../init.d/nginx
S表示啟動的意思,NN表示的是數字,這些數字表明了腳本的執行順序,數字越小越先被執行。這個執行順序可以很好的管理服務的依賴性關聯。
開機自啟服務
-
開機自啟動:chkconfig on deamon
-
關閉開啟自啟動:chkconfig off deamon
-
查看服務是否已啟動:chkconfig –list daemon
systemd管理機制
自centos7以后,就棄用了之前的init管理機制,改用了systemd。下面我們來看看systemd管理有什么不一樣的吧。
平行處理所有服務,加快開機流程。
和init一項一項去啟動服務不同的是,systemd可以同時啟動許多服務。所以,這樣會大大加快開機等待時機。
解決服務相關性依賴
比如說要啟動B服務必須要先啟動A服務,這個時候,用systemd去啟動B服務,它會自動檢查依賴性,然后在啟動B服務前先啟動A服務。
unit類型
和init只有兩種啟動方式的stand alone、super daemon相比,systemd定義了一個統一的服務單位(unit),unit又分為:service, socket, target, path, snapshot, timer等多種類型。
向下兼容init的服務腳本
舊的/etc/inid.d/下面服務啟動腳本,也是可以通過systemd去管理的。注意:若以手動方式啟動/etc/init.d目錄下的服務啟動腳本,那么systemd是不能檢測到該服務的運行狀況的。
#?systemctl?status?mysqld ●?mysqld.service?-?LSB:?start?and?stop?MySQL ???Loaded:?loaded?(/etc/rc.d/init.d/mysqld;?bad;?vendor?preset:?disabled) ???Active:?active?(running)?since?Wed?2020-10-28?13:26:53?CST;?1?weeks?5?days?ago …… #?/etc/init.d/mysqld?restart Shutting?down?MySQL....????????????????????????????????????[??OK??] Starting?MySQL.????????????????????????????????????????????[??OK??] [root@lijia?~]#?systemctl?status?mysqld ●?mysqld.service?-?LSB:?start?and?stop?MySQL ???Loaded:?loaded?(/etc/rc.d/init.d/mysqld;?bad;?vendor?preset:?disabled) ???Active:?active?(exited)?since?Wed?2020-10-28?13:26:53?CST;?1?weeks?5?days?ago ……
關于init與systemd,我們需要重點掌握systemd,對于init也是需要去了解的。