前言
systemctl本身的意義並不僅僅是一個命令那么簡單,他標志着SysV時代的終結,Systemd時代的開始。CentOS 7.X系列已經拋棄SysV,全面擁抱Systemd這個init system。由於新技術的引入,傳統Linux啟動流程,從BIOS->MBR->bootloader->kernel->init system。。。。整個環節自init system就徹底變了。
全新的init sysytem——systemd
雖然CentOS 7.X已經全面采用systemd,但是SysV到Systemd的轉換並不是很徹底。在runlevel的對應上,大概僅有runlevel1,3,5有對應到systemd的某些target類型而已,沒有全部對應。
Systemd對比SysV命令更少,只有一個命令,就是本文要介紹的systemctl。但是systemctl也有缺點,systemctl是ELF可執行文件,不像/etc/init.d/daemon 就是純腳本可以自定義參數,systemctl不可自定義參數。
其他信息參見腦圖。
systemctl
command主要有
start:立刻啟動后面接的unit
stop:立刻關閉后面接的unit
restart:立刻關閉后啟動后面接的unit,亦即執行stop再start的意思
reload:不關閉后面接的unit的情況下,重載配置文件,讓設定生效
enable:設定下次開機時,后面接的unit會被啟動
disable:設定下次開機時,后面接的unit 不會被啟動
status:目前后面接的這個unit 的狀態,會列出是否正在執行、是否開機啟動等信息。
is-active:目前有沒有正在運行中
is-enable:開機時有沒有預設要啟用這個unit
list-units:依據unit列出目前有啟動的unit。若加上--all才會列出沒啟動的。(等價於無參數)
list-unit-files:列出所有以安裝unit以及他們的開機啟動狀態(enabled、disabled、static、mask)。
--type=TYPE:就是unit type,主要有service,socket,target等
get-default: 取得目前的 target
set-default:設定后面接的 target 成為默認的操作模式
isolate:切換到后面接的模式
list-dependencies :列出unit之間依賴性
list-sockets:查看監聽socket的unit
舉例
查看某一服務狀態
Loaded這一行表明該unit在開機的時候是否會啟動。
enabled:開機會啟動
disabled:開機不會啟動
static:這個unit不可以自己啟動,但是可以被其他enabled的unit啟動(說明unit之間有依賴關系)
mask:這個unit無論如何都不會啟動,因為它已被強制注銷(非刪除),可通過systemctl unmask方式改回原本狀態。
Active這一行表示unit當前狀態
active(running):當前有一個或多個unit正在系統中運行
active(exited):僅執行一次就正常退出的unit,目前並沒有任何程序在系統中執行。舉例來說,我們通常寫的shell腳本就屬於這種情況,無須常駐內存。
active(waiting):正在執行當中,不過還再等待其他的事件才能繼續處理。舉例來說,打印的隊列相關服務
inactive:這個服務目前沒有運作的意思。
關閉一個unit
使用stop這個command
切記,不可以使用 kill 的方式來殺掉一個正常的unit,否則systemctl會無法繼續監控該服務。
通常而言,關閉一個unit,並不會有什么反饋輸出(Linux下面沒有輸出就是最好的輸出,因為一般有輸出代表你錯了)。但是禁用一個unit是會有輸出的,輸出結果就是在/etc/systemd/system/中刪除指向/usr/lib/systemd/system/的軟連接。參見腦圖
禁用一個unit——正規方法
禁用cups. service 服務

[ root@ study ~]# systemct1 disable cups. service rm'/etc/systemd/system/multi-user. target. wants/cups. path' rm'/etc/systemd/system/sockets. target. wants/cups. socket' rm'/etc/systemd/sys tem/printer. target. wants/cups. service'
在禁用cups的時候,發現一共禁用了3個服務,說明這三個服務有依賴關系。
cups是一種網絡打印服務,該服務監聽631端口。但是系統無虛一致開放631端口,而是用cups.socket在接到打印需求的時候喚醒cups.service。
因此要想徹底禁用打印服務,只禁用cups.service沒卵用,要連帶那兩個依賴服務一起禁用。這是最標准的禁用方法。下面再說不正規的禁用方法,使用mask
禁用一個unit——非正規方法
使用mask也可以做到禁用unit的目的,還是用上面的cups為例,啟動cups服務,最終都是喚醒cups.service這個服務。
mask的做法是把cups.sevice鏈接到/dev/null,那么這個服務便指向了Linux垃圾桶,你無聊如何都不可能再啟動這個服務了。
取消mask修改也很簡單,使用unmask
suspend和hibernate模式區別?
suspend暫停模式,會將系統的狀態數據保存到內存中,然后關閉掉大部分的系統硬件,當然,並沒有實際關機。當用戶按下喚醒機器的按鈕,系統數據會重內存中回復,然后重新驅動被大部分關閉的硬件,就開始正常運作!喚醒的速度較快。
hibermate:休眠模式則是將系統狀態保存到硬盤當中,保存完畢后,將計算機關機。當用戶嘗試喚醒系統時,系統會開始正常運作,然后將保存在硬盤中的系統狀態恢復回來。因為數據是由硬盤讀出,因此喚醒的效能與你的硬盤速度有關。