對systemV和systemd的簡單理解(服務方面)


在CentOS7(RHEL7)以后,服務從原來的由systemV管理機制升級到了systemd。

在sysV中,所有的服務腳本都放在/etc/rc.d/init.d/中,可以使用/etc/rc.d/init.d/daemon [start|stop|restart|reload|status]方式來管理服務,默認的運行級別在/etc/inittab文件中定義,當系統以某個運行級別啟動時,會運行/etc/rc.d/rcN.d/(其中N范圍為0~6)目錄中所有的腳本,而這些腳本的命名都是Knnxxxxx或Snnxxxxx,其中S表示系統啟動時調用,K表示系統終止時調用,nn是00~99的數字,數字的大小決定了腳本運行的順序,最后的xxxxx為腳本的名稱(長度任意),這些目錄里的文件都是指向init.d目錄中腳本的軟連接,因為各個運行級別的所需的服務可能存在交集,所以這樣能節省硬盤使用空間。

在sysV中,服務被分成兩大類,一類是可獨立運行的服務,另一類是受xinetd管理的服務,而xinetd本身是一個獨立運行的服務,用來負責管理一些不常用的服務,當這些服務需要被使用時,由xinetd來喚醒它們,當服務使用完后,這些服務會被結束以減少系統資源的占用。

在sysV中,定義了6個運行級別,分別是:

runlevel0 = 關機

runlevel1 = 單用戶模式,僅root

runlevel2 = 帶網絡的單用戶模式

runlevel3 = 多用戶模式,字符界面,標准模式

runlevel4 = 保留

runlevel5 = 多用戶模式,圖形界面,X11(X Window)

runlevel6 = 重啟

上文中提到的文件和目錄的截圖:(RHEL7)

/etc/inittab:

/etc/rc.d/:(rc.local是一個腳本文件,里面定義了用戶自定義啟動的程序)

 

/etc/rc.d/rc.local:

 /etc/rc.d/init.d/:(文件functions定義了很多函數,供給本目錄里的腳本調用,而文件README是一個說明文件,主要說明“現在的服務由systemd管理,不再推薦使用這些腳本”,剩下的文件都是對應服務的腳本文件)

 /etc/rc.d/rc3.d/:

 

在systemd中,所有的服務腳本都稱為unit,主要分成6類:.service, .socket, .target, .path, snapshot, .timer,它們都存放在/usr/lib/systemd/system/目錄中。

在systemd中,統一采用systemctl命令來管理所有的服務,主要用法:

systemctl [start|stop|restart|reload|status|is-active|is-enable|enable|disable|mask|umask] 服務名.類型  (當服務為servce類型時可以省略類型,如atd.service可以簡寫為atd,其他的類型不能省略,如talnet.socket)

systemclt set-default|get-default|isolate xxxxx.target 設置默認運行級別|獲取當前的默認運行級別|不重啟切換當前環境  (什么是環境呢,target類型的服務都為環境,當運行或切換(需要使用isolate而不能使用start)一個環境時往往會伴隨着啟動很多其他的服務用以支持這個環境,最常見的環境就是字符界面和圖形界面,比如想從現在的字符界面臨時切換到圖形界面,使用systemctl isolate graphical.tatget)

在systemd中,運行級別由/etc/systemd/system/default.target定義,這個文件本身是一個軟連接,如果它指向graphical.targer那么默認的運行級別就是圖形界面。

在systemd中,為了向下兼容也提供了一些target來映射sysV中的運行級別,見下圖,

會發現,有一些以.wants結尾的目錄,上文已經說過了環境的變化往往會伴隨着很多其他服務,而wants目錄就是當target類型的服務切換之后自動運行的其他服務。

利用systemctl查看服務:

systemctl 列出所有已啟動的服務

systemctl list-units 同上

systemctl list-units --all 列出所有服務,包括沒啟動的

systemctl list-unit-files 列出/usr/lib/systemd/system/目錄內所有的服務文件

systemctl list-units --type=service --all 列出所有service類型的服務,其中--type的取值還可以是target,socket等等

systemctl list-units --type=service --all|grep -i cpu 列出所有和cpu相關的服務

 利用systemctl快速改變環境:

systemctl poweroff 關機(相當於systemctl isolate poweroff.target)

systemctl reboot 重啟

systemctl suspend 暫停/睡眠,將系統數據寫入內存,同時將大部分硬件關閉,等待喚醒(相當於Windows下的睡眠) 

systemctl hibernate 休眠,將系統數據寫入硬盤,然后關機

systemctl rescue 進入救援模式

systemctl emergency 進入緊急模式,比救援模式更強更徹底


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM