- systemd基本概念
- systemd管理服務
- systemd管理運行級別
- systemd其他命令
一骚亿、systemd基本概念
(一)systemd簡要介紹
定義
系統(tǒng)啟動和服務器守護進程管理器,負責在系統(tǒng)啟動或運行時,激活系統(tǒng)資源煤蚌,服務器進程和其它進程-
新特性
- 系統(tǒng)引導時實現服務并行啟動
- 按需啟動守護進程
- 自動化的服務依賴關系管理
- 同時采用socket式與D-Bus總線式激活服務
- 系統(tǒng)狀態(tài)快照
systemd核心概念unit
unit表示不同類型的systemd對象嚎花,通過配置文件進行標識和配置撩嚼;文件中主要包含了系統(tǒng)服務捆憎、監(jiān)聽socket、保存的系統(tǒng)快照以及其它與init相關的信息-
配置文件
- /usr/lib/systemd/system:每個服務最主要的啟動腳本設置迟隅,類似于之前的/etc/init.d/
- /run/systemd/system:系統(tǒng)執(zhí)行過程中所產生的服務腳本但骨,比上面目錄優(yōu)先運行
- /etc/systemd/system:管理員建立的執(zhí)行腳本,類似于/etc/rc.d/rcN.d/Sxx類的功能玻淑,比上面目錄優(yōu)先運行
(二)systemd的unit類型
- systemctl -t help:查看unit類型
- service unit:文件擴展名為.service嗽冒,用于定義系統(tǒng)服務
- target unit:文件擴展名為.target,用于模擬實現運行級別
- device unit:文件擴展名為.device补履,用于定義內核識別的設備
- mount unit:文件擴展名為.mount添坊,定義文件系統(tǒng)掛載點
- socket unit:文件擴展名為.socket,用于標識進程間通信用的socket文件箫锤,也可在系統(tǒng)啟動時贬蛙,延遲啟動服務雨女,實現按需啟動
- snapshot unit:文件擴展名為.snapshot,管理系統(tǒng)快照
- swap unit:文件擴展名為.swap阳准,用于標識swap設備
- automount unit:文件擴展名為.automount氛堕,文件系統(tǒng)的自動掛載點
- path unit:文件擴展名為.path,用于定義文件系統(tǒng)中的一個文件或目錄使用野蝇,常用于當文件系統(tǒng)變化時讼稚,延遲激活服務,如:spool 目錄
(三)systemd的特性
-
關鍵特性
- 基于socket的激活機制:socket與服務程序分離
- 向后兼容sysvinit腳本
-
不兼容:
- systemctl命令固定不變绕沈,不可擴展
- 非由systemd啟動的服務锐想,systemctl無法與之通信和控制
二、systemd管理服務
- 語法:systemctl COMMAND name.service
(一)管理服務
- 啟動:
systemctl start name.service
乍狐,相當于CentOS6的service name start
- 停止:
systemctl stop name.service
赠摇,相當于CentOS6的service name stop
- 重啟:
systemctl restart name.service
,相當于CentOS6的service name restart
- 狀態(tài):
systemctl status name.service
浅蚪,相當于CentOS6的service name status
- 條件式重啟:已啟動才重啟藕帜,否則不做操作
systemctl try-restart name.service
,相當于CentOS6的service name condrestart
如下圖:之前sshd服務未啟動惜傲,使用條件式重啟時發(fā)現服務未開啟洽故,未做任何操作,故查詢狀態(tài)仍舊是inactive
- 重載或重啟服務:先加載操漠,再啟動
systemctl reload-or-restart name.service - 重載或條件式重啟服務:
systemctl reload-or-try-restart name.service - 禁止自動和手動啟動:
systemctl mask name.service - 取消禁止自動和手動啟動:
systemctl unmask name.service
如圖:可以看出mask和umask命令實際為建立/刪除指向/dev/null的軟鏈接
- 實驗:修改unit
修改/usr/lib/systemd/system/sshd.service
文件收津,將Description改為OpenSSH new server daemon
,此時用systemctl status sshd.service
查看服務狀態(tài)浊伙,發(fā)現服務正常運行,但名稱沒有改變
根據狀態(tài)信息的提示长捧,執(zhí)行systemctl daemon-reload
嚣鄙,再查看狀態(tài)發(fā)現名稱改變了
當服務正在運行時,對服務的unit文件的改動必須進行重載才能更新
(二)查看服務
- 查看某服務當前激活與否的狀態(tài):
systemctl is-active name.service - 查看所有已經激活的服務:
systemctl list-units --type|-t service - 查看所有服務:
systemctl list-units --type|-t service --all|-a
(三)設置服務開機自啟狀態(tài)
設定某服務開機自啟:
systemctl enable name.service串结,相當于CentOS6的chkconfig name on設定某服務開機禁止啟動:
systemctl disable name.service哑子,相當于CentOS6的chkconfig name off查看所有服務的開機自啟狀態(tài):
systemctl list-unit-files --type|-t service,相當于CentOS6的chkconfig --list用來列出該服務在哪些運行級別下啟用和禁用:
ls /etc/systemd/system/*.wants/sshd.service肌割,相當于CentOS6的chkconfig sshd --list-
實驗:設置服務自啟和禁止自啟
(1)ntpdate.service服務原先禁止自啟[紅框1]卧蜓。
(2)執(zhí)行systemctl enabel ntpdate.service
命令,設置ntpdate.service服務為自啟把敞,提示建立了軟鏈接文件[紅框2]弥奸。
(3)此時刪除軟鏈接文件后,發(fā)現ntpdate.service服務仍舊為禁止自啟狀態(tài)[紅框3]奋早。
(4)按照之前的提示信息盛霎,手動建立軟鏈接文件
ln -s /usr/lib/systemd/system/ntpdate.service /etc/systemd/system/multi-user.target.wants/ntpdate.service
赠橙。
(5)再查詢發(fā)現ntpdate.service服務的狀態(tài)變?yōu)樽詥紅框4]。(6)執(zhí)行
systemctl disable ntpdate.service
命令愤炸,提示刪除了軟鏈接文件期揪。
(7)使用ls命令查詢提示信息路徑,確實文件已經消失规个。
(8)執(zhí)行systemctl is-enabled ntpdate.service
命令凤薛,確認當前ntpdate服務處于禁止自啟狀態(tài)。總結:將某個服務設為自啟或者禁止自啟诞仓,實際上就是在相應的文件夾建立軟鏈接文件的過程缤苫,systemd通過查詢軟鏈接文件的存在與否判斷啟用/禁止自啟的狀態(tài)。
(四)其他命令
查看服務是否開機自啟:
systemctl is-enabled name.service-
查看服務的依賴關系:
systemctl list-dependencies name.service 殺掉進程:
systemctl kill unitname
(五)服務狀態(tài)
- 顯示狀態(tài):systemctl list-unit-files --type service --all
- loaded:unit配置文件已處理
- active(running):一次或多次持續(xù)處理的運行
- active(exited):成功完成一次性的配置
- active(waiting):運行中狂芋,等待一個事件
- inactive:不運行
- enabled:開機啟動
- disabled:開機不啟動
- static:開機不啟動榨馁,但可被另一個啟用的服務激活
三、systemd管理運行級別
(一)target的基本概念
target:systemd的運行級別管理unit
路徑:/usr/lib/systemd/system/*.target
顯示狀態(tài):systemd list-unit-files --type target --all
-
systemd的運行級別與傳統(tǒng)運行級別的對應關系
- runlevel0.target, poweroff.target ==> 0
- runlevel1.target, rescue.target ==> 1
- runlevel2.target, multi-user.target ==> 2
- runlevel3.target, multi-user.target ==> 3
- runlevel4.target, multi-user.target ==> 4
- runlevel5.target, graphical.target ==> 5
- runlevel6.target, reboot.target ==> 6
查看target的依賴關系:
systemctl list-dependencies name.target
(二)級別切換
級別切換:systemctl isolate name.target
注:只有/lib/systemd/system/*.target文件中AllowIsolate=yes 才能切換(修改文件需執(zhí)行systemctl daemon-reload才能生效)顯示狀態(tài):systemctl list-unit-files --type target -all
獲取默認運行級別:
systemctl get-default修改默認級別:
systemctl set-default name.target-
實驗:將默認級別由multi-user改為graphical
四帜矾、systemd其他命令
切換至緊急救援模式:
systemctl rescue切換至emergency模式:
systemctl emergency-
其它常用命令:
- 傳統(tǒng)命令init翼虫,poweroff,halt屡萤,reboot都成為systemctl的軟鏈接
- 關機:systemctl halt珍剑、systemctl poweroff
- 重啟:systemctl reboot
- 掛起:systemctl suspend
- 休眠:systemctl hibernate
- 休眠并掛起:systemctl hybrid-sleep