注:從Centos7開始systemd代替了init,使用systemd機制來管理服務
優勢:
- 并行處理所有服務,加速開機流程
- 命令相對簡單:所有操作均有systemctl命令來執行
- 服務依賴性檢測:systemctl命令啟動服務時會自動啟動依賴服務
一、systemd的配置文件位置
- /usr/lib/systemd/system/:服務啟動腳本存放位置
- /run/systemd/system/:系統執行過程中產生的服務腳本
- /etc/systemd/system/:管理員根據自己主機系統需求所創建的執行腳本
注:以sshd服務為例,關閉開機自啟動就相當于移除sshd.service文件,設置開機自啟動就相當于創建sshd.service文件的軟鏈接
二、systemctl管理服務
注:基本上服務管理命令都是通過systemctl命令來完成的
systemctl:管理服務狀態,開機自啟動等
格式:systemctl? [選項]? 服務守護進程名稱
選項:
- start:啟動服務。
- stop:停止服務。
- restart:重啟。
- reload:不關閉服務的情況下,重新讀取服務配置文件。
- status:查看指定服務狀態。
- enable:開機啟動。
- disable:開機不啟動。
- is-enabled:查看指定服務是否為開機啟動。enable 啟動/disable 不啟動。
常見后綴:
- .service:用來啟動和控制守護進程和進程的服務單元
- .target:執行環境類型,也就是啟動流程中的multi-user.target和graphical.target
三、查看系統上所有服務
命令:systemctl
選項:
- list-units:顯示當前的unit,添加--all選項則列出啟動和未啟動的所有unit
- list-unit-files:顯示/usr/lib/systemd/system/的unit啟用狀態
- UNIT:單元名稱或服務名稱
- LOAD:表示單元是否正確加載
- ACTIVE:表示高級單元激活狀態
- SUB:低級單元激活狀態,取值決定于單元類型
- DESCRIPTION:簡要描述信息
實驗
步驟一:顯示各種單元,如服務單元、掛載單元、定時計劃單元等
步驟二:查看服務單元相對應的狀態,可以先安裝at服務,然后關閉開機啟動,重啟服務查看文件
第二列是當前用戶設置的是否開機自啟動,第三列是系統默認設置
四、切換操作環境
- graphical.target:圖形化界面
- multi-user.target:命令行模式
- rescue.target:救援模式
- emergency.target:緊急處理系統的錯誤,僅限root用戶。再無法使用rescue.target 的情況下可以嘗試使用此模式
- poweroff.target:關機
- reboot.target:重啟
實驗
步驟一:切換到命令行模式
步驟二:切換回圖形化界面
補充
相較于init命令切換操作環境,init命令顯然要更加簡單,但如果出現了init 3和5命令失效的情況,可以使用graphical.target和multi-user.target來切換操作環境
五、使用systemctl管理源碼包nginx
步驟一:首先安裝好nginx,然后啟動服務,查看監聽80端口
步驟二:查看/usr/lib/systemd/system/sshd.service文件,確定其他服務的配置文件是如何編輯的,仿照編輯nginx配置文件,使得systemctl命令可以找到該文件
步驟三:重載配置文件,然后查看nginx的進程狀態,發現未開啟,但實際上nginx服務已經通過本地執行文件運行,只是沒有被systemctl所記錄
步驟四:關閉nginx服務,然后使用systemctl命令重新啟動,再查看nginx進程狀態
現在nginx服務可以被systemctl命令所調用
步驟五:再將服務設置為開啟自啟動,發現同樣沒有什么問題,實驗結束
注:如果實驗沒有正常進行,systemctl start nginx沒有辦法正常啟動服務,報錯,則可以試著把SElinux關閉,然后再啟動服務[命令:setenforce 0]
補充:設置開機自啟動命令的配置文件/etc/rc.d/rc.local, 只要為這個文件設置可執行權限,在這個文件里寫入的命令都會在開機的時候自動執行