systemctl指令
Systemd
是一個指令組,涉及到系統管理的方方面面,而
systemctl
是
Systemd
的主指令,用于管理系統。
描述
在曆史上
Linux
的啟動一直采用
init
程序,這種方法有兩個缺點,一是啟動時間長,
init
程序是串行啟動,隻有前一個程序啟動完,才會啟動下一個程序,二是啟動腳本複雜,
init
程序隻是執行啟動腳本,不管其他事情,腳本需要自己處理各種情況,這往往使得腳本變得很長。
Systemd
就是為了解決這些問題而誕生的,它的設計目标是,為系統的啟動和管理提供一套完整的解決方案,根據
Linux
慣例,字母
d
是守護程序
daemon
的縮寫,
Systemd
這個名字的含義,就是它要守護整個系統。使用了
Systemd
,就不需要再用
init
了,
Systemd
取代了
initd
,成為系統的第一個程序
PID
等于
1
,其他程序都是它的子程序,
Systemd
的優點是功能強大,使用友善,缺點是體系龐大,非常複雜,事實上,現在還有很多人反對使用
Systemd
,理由就是它過于複雜,與作業系統的其他部分強耦合,違反
keep simple, keep stupid
的
Unix
哲學。
文法
systemctl [OPTIONS...] {COMMAND} ...
參數
OPTIONS
-
: 參數應該是以逗号分隔的單元類型清單,例如-t, --type=
和service
,如果其中一個參數是機關類型,則在列出機關時,将顯示限制為某些機關類型,否則将顯示所有類型的機關,作為一種特殊情況,如果其中一個參數是socket
,則将列印允許值的清單,程式将退出。help
-
: 參數應該是以逗号分隔的機關負載、子狀态或活動狀态清單,列出機關時,僅顯示處于指定狀态的機關。--state=
-
: 使用-p, --property=
指令顯示show
屬性時,将顯示限制為參數指定的某些屬性,如果未指定,則顯示所有集合屬性,參數應該是以逗号分隔的屬性名清單,例如unit/job/manager
,如果多次指定,将顯示具有指定名稱的所有屬性。MainPID
-
: 列出機關時,請顯示所有加載的機關,無論其狀态如何,包括不活動的機關,顯示-a, --all
屬性時,無論是否設定,都顯示所有屬性,要列出系統上安裝的所有單元,請改用unit/job/manager
指令。list-unit-files
-
: 當列出機關時,還顯示本地容器的機關,本地容器的機關将以容器名稱為字首,并用單個冒号-r, --recursive
分隔。:
-
: 顯示具有清單依賴性的單元之間的反向依賴性,即在給定單元上具有類型為--reverse
或Wants=
的單元。Requires=
-
--after
清單依賴項,顯示在指定機關之前排序的機關,換句話說,列出在指定單元的list-dependencies
指令中的單元、在After=
指令中有指定單元的單元,或者是指定單元的隐式依賴項。Before=
-
--before
清單依賴項,顯示在指定機關之後排序的機關,換言之,列出在指定單元的list-dependencies
指令中、在Before=
指令中具有指定單元或以其他方式依賴于指定單元的單元。After=
-
: 不省略狀态,即-l, --full
清單單元、list-units
清單作業和list-jobs
清單計時器的輸出中的單元名稱,list-timers
過程樹條目,process tree entries
日志輸出或journal output
截斷單元描述。truncate unit descriptions
-
: 顯示套接字時,顯示套接字的類型。--show-types
-
: 将新作業排隊時,此選項控制如何處理已排隊的作業,它采用--job-mode=
、fail
replace
replace
replace-irreversibly
isolate
ignore dependencies
ignore requirements
之一,預設為flush
,除非使用了表示隔離作業模式的replace
指令。如果指定了isolate
,并且請求的操作與挂起的作業沖突,更具體地說導緻已挂起的開始作業反轉為停止作業,反之亦然,則導緻操作失敗。如果指定了fail
預設值,則将根據需要替換任何沖突的挂起作業。如果指定了replace
,則按replace-irreversibly
操作,但也要将新作業标記為不可逆,這可以防止将來發生沖突的事務替換這些作業,甚至在不可逆作業仍挂起時排隊,仍然可以使用replace
指令取消不可逆的作業。cancel
僅對啟動操作有效,并在啟動指定單元時導緻所有其他單元停止。使用隔離指令時,始終使用此模式。isolate
将導緻在新作業排隊時取消所有排隊作業。如果指定了flush
,那麼将忽略此新作業的所有單元依賴項,并立即執行該操作,如果通過,則不會引入所通過單元的任何必需單元,并且不會遵循任何排序依賴關系,這主要是管理者的調試和救援工具,不應該被應用程式使用。ignore-dependencies
與ignore-requirements
類似,但隻會導緻忽略需求依賴項,排序依賴項仍将得到滿足。ignore-dependencies
-
: 當系統關閉或請求睡眠狀态時,忽略抑制器鎖,應用程式可以建立抑制器鎖,以避免某些重要操作如-i, --ignore-inhibitors
刻錄等被系統關閉或睡眠狀态中斷,任何使用者都可以使用這些鎖,特權使用者可以重寫這些鎖,如果使用任何鎖,關機和睡眠狀态請求通常會失敗無論是否具有特權,并列印活動鎖的清單,但是如果指定了CD
,則會忽略鎖而不列印,并且無論如何都會嘗試該操作,可能需要額外的權限。--ignore inhibitors
-
: 禁止-q, --quiet
snapshot
is-active
is-failed
is-enabled
is-system-running
enable
的輸出為标準輸出。disable
-
: 不要同步等待請求的操作完成,如果未指定,則将驗證作業,将其加入隊列,并且--no-block
将等待直到完成,通過傳遞此參數,僅對其進行驗證和排隊。systemctl
-
: 不列印圖例,即帶有提示的列标題和頁腳。--no-legend
-
: 與主叫使用者的服務管理者傳遞資訊,而不是與系統的服務管理者聯系。--user
-
: 與系統的服務管理傳遞資訊,這是預設值。--system
-
: 列出失敗狀态的單元,這等效于--failed
。--state=failed
-
: 停止,關閉電源,重新啟動之前,不發送--no-wall
wall message
-
: 當與--global
enable
一起使用時,對全局使用者配置目錄進行操作,進而全局地啟用或禁用所有使用者将來登入的單元檔案。disable
-
--no-reload
enable
一起使用時,不要在執行更改後隐式地重新加載守護程式配置。disable
-
: 與--no-ask-password
和相關指令一起使用時,禁用詢問密碼,背景服務可能需要輸入密碼或密碼短語字元串,例如解鎖系統硬碟或加密證書,除非指定了此選項并且指令是從終端調用的,否則start
将在終端上向使用者查詢必要的機密,使用此選項可關閉此行為,在這種情況下,必須通過其他方式例如圖形密碼代理提供密碼,否則服務可能會失敗,這還禁止查詢使用者以進行特權操作的身份驗證。systemctl
-
--kill-who=
一起使用時,選擇要向哪個程序發送信号,必須是kill
main
control
中的一個,以選擇是僅終止主程序、控制程序還是終止單元的所有程序,單元的主要過程是定義其生命周期的過程,一個單元的控制過程是由管理者調用以引起其狀态變化的過程。例如由于服務單元的all
ExecStartPre=
ExecStop=
設定而啟動的所有程序都是控制程序,注意每個單元一次隻有一個控制過程,因為一次隻執行一個狀态更改,對于ExecReload=
的服務,type=forking
啟動的初始程序是一個控制程序,而最終由該程序派生的程序則被視為單元的主程序(如果可以确定的話),對于其他類型的服務單元,這是不同的,在這些服務單元中,ExecStart=manager
的管理器分叉的程序始終是主程序本身,一個服務單元由零個或一個主程序、零個或一個控制程序以及任意數量的附加程序組成,然而并不是所有的單元類型都管理這些類型的流程,例如對于ExecStart=
單元,定義了控制程序即mount
/bin/mount
的調用,但沒有定義主程序,如果省略,則預設為/bin/umount
all
-
-s, --signal=
一起使用時,選擇要發送到標明程序的信号,必須是衆所周知的信号說明符之一,如kill
SIGTERM
SIGINT
,如果省略,則預設為SIGSTOP
SIGTERM
-
-f, --force
一起使用時,覆寫任何現有的沖突符号連結,當與enable
halt
poweroff
reboot
一起使用時,執行所選操作而不關閉所有單元,但是所有程序都将被強制終止,所有檔案系統都以隻讀方式解除安裝或重新裝載,是以這是一個要求立即重新開機的激烈但相對安全的選擇,如果為這些操作指定了kexec
兩次,它們将立即執行,而不會終止任何程序或解除安裝任何檔案系統,警告在這些操作中指定--force
兩次可能會導緻資料丢失。--force
-
--root=
和相關指令一起使用時,在查找機關檔案時使用備用根路徑。enable/disable/is enabled
-
--runtime
enable
和相關指令一起使用時,僅臨時進行更改,以便在下次重新啟動時丢失更改,這将産生這樣的效果,更改不是在disable
的子目錄中進行的,而是在/etc
中進行的,具有相同的即時效果,但是由于後者在重新啟動時丢失,是以更改也會丢失,類似地,當與/run
屬性一起使用時,僅臨時進行更改,以便在下次重新啟動時丢失更改。set
-
: 取--preset-mode=
預設、full
enable only
之一,當與預設或預設所有指令一起使用時,控制是根據預設規則禁用和啟用單元,還是僅啟用或僅禁用單元。disable only
-
-n, --lines=
一起使用時,控制要顯示的日志行數,從最近的行開始計算,接受一個正整數參數,預設為status
10
-
: 與狀态一起使用時,控制顯示的日記賬分錄的格式,有關可用選項,請參見-o, --output=
,預設為journalctl
short
-
--plain
清單依賴項一起使用時,輸出将列印為清單而不是樹。list-dependencies
-
: 遠端執行操作,指定要連接配接的主機名,或使用者名和主機名之間用-H, --host=
分隔,主機名的字尾可以是一個容器名,用@
分隔,它直接連接配接到指定主機上的特定容器,這将使用:
與遠端SSH
執行個體通信,容器名稱可以用machinemanager
枚舉。machinectl-H HOST
-
: 在本地容器上執行操作,指定要連接配接到的容器名稱。-M, --machine=
-
: 輸出幫助資訊。-h, --help
-
: 輸出版本資訊。--version
Unit Commands
-
: 列出已知機關,受list-units [PATTERN...]
規定的限制,如果指定了一個或多個模式,則隻顯示與其中一個模式比對的單元,這是預設-t
PATTERN
-
: 列出按偵聽位址排序的套接字單元。如果指定了一個或多個模式,則僅顯示與其中一個模式比對的套接字單元。list-sockets [PATTERN...]
-
: 列出計時器機關,按它們下一次經過的時間排序,如果指定了一個或多個模式,則隻顯示與其中一個模式比對的單元。list-timers [PATTERN...]
-
: 啟動(激活)指令行上指定的一個或多個單元,請注意全局模式在目前已加載的機關清單上運作,通常不處于活動狀态且未處于故障狀态的單元不會被加載,并且不會通過任何模式進行比對,另外在執行個體化單元的情況下,start PATTERN...
通常在啟動執行個體之前才知道執行個體名稱,是以将systemd
模式與glob
一起使用具有有限的用途。start
-
: 停止(停用)指令行上指定的一個或多個機關。stop PATTERN...
-
: 要求指令行上列出的所有機關重新加載其配置,請注意這将重新加載特定于服務的配置,而不是reload PATTERN...
的單元配置檔案,如果希望systemd
重新加載單元的配置檔案,請使用systemd
指令,例如對于daemon reload
的示例,這将重新加載Apache
Apache
檔案在httpd.conf
伺服器中,而不是web
服務系統機關檔案,此指令不應與守護程序重載或加載指令混淆。apache.service
-
: 重新啟動指令行中指定的一個或多個單元,如果這些單元還沒有運作,它們将被啟動。restart PATTERN...
-
: 如果一個或多個單元正在運作,則重新啟動指令行中指定的一個或多個單元,如果單元沒有運作,則不會執行任何操作,注意,為了與try-restart PATTERN...
腳本相容,Red Hat init
等價于這個指令。condrestart
-
: 如果機關支援的話則重新加載,否則,重新啟動它們,如果這些單元還沒有運作,它們将被啟動。reload-or-restart PATTERN...
-
: 如果機關支援的話則重新加載,否則,重新啟動它們。如果這些單元沒有運作,這将不起任何作用,注意,為了與reload-or-try-restart PATTERN...
SysV init
相當于這個指令。force reload
-
: 啟動指令行上指定的單元及其依賴項,并停止所有其他單元,這類似于在傳統的isolate NAME
系統中更改運作級别,init
指令将立即停止新單元中未啟用的程序,可能包括目前使用的圖形環境或終端,請注意,這隻允許在啟用isolate
的單元上使用,詳情請參見AllowIsolate=
systemd.unit
-
: 向裝置的一個或多個程序發送信号,使用kill PATTERN...
選擇要終止的程序,使用--kill who=
選擇要發送的信号。--signal=
-
: 檢查是否有任何指定的單元處于活動狀态,即正在運作,如果至少有一個處于活動狀态,則傳回退出代碼0,否則傳回非零,除非指定is-active PATTERN...
,否則這也會将目前機關狀态列印到标準輸出。--quiet
-
: 檢查指定的單元是否處于失敗狀态,如果至少有一個失敗,則傳回退出代碼 ,否則傳回非零,除非指定is-failed PATTERN...
--quiet
-
: 顯示關于一個或多個單元的簡要運作時狀态資訊,然後是來自日志的最新日志資料,如果未指定機關,則顯示系統狀态,如果與status [PATTERN...|PID...]]
組合,也顯示所有單元的狀态(受--all
指定的限制),如果傳入-t
,則顯示該程序所屬的單元資訊,這個函數的目的是生成人類可讀的輸出,如果您正在尋找計算機可解析的輸出,請使用PID
代替,預設情況下,這個函數隻顯示show
行輸出和橢圓線以适應終端視窗,這可以用10
--lines
來更改,此外--full
journalctl --unit=NAME
對消息使用了類似的過濾器,可能更友善。journalctl --user-unit=NAME
-
: 顯示一個或多個單元、作業或管理器本身的屬性,如果未指定參數,則将顯示管理器的屬性,預設情況下,将禁止空屬性。用show [PATTERN...|JOB...]
的來顯示所有屬性,要選擇要顯示的特定屬性,請使用--all
,此指令用于需要計算機可分析輸出時,如果要查找格式化的可讀輸出,請使用--property=
status
-
: 顯示一個或多個單元的備份檔案,列印單元的cat PATTERN...
fragment
(源檔案),每個檔案前面都有一個注釋,其中包含檔案名。drop-ins
-
: 在支援的運作時設定指定的單元屬性,這允許在運作時更改配置參數屬性,例如資源控制設定,并非所有屬性都可以在運作時更改,但許多資源控制設定set-property NAME ASSIGNMENT...
可以,更改會立即應用,并存儲在磁盤上以備将來引導,除非傳遞了systemd.resource-control
,在這種情況下,設定隻應用到下一次重新啟動,屬性指派的文法與機關檔案中指派的文法非常相似。例如--runtime
,請注意,此指令允許同時更改多個屬性,這比單獨設定屬性更好,與單元檔案配置設定一樣,将空清單指定給清單參數将重置清單。systemctl set-property foobar.service CPUShares=777
-
: 顯示一個或多個單元的手冊頁(如果可用),如果給定help PATTERN...|PID...
,則會顯示流程所屬單元的手冊頁。PID
-
: 重置指定單元的reset-failed [PATTERN...]
狀态,或者如果沒有傳遞單元名稱,則重置所有單元的狀态,當一個單元以某種方式發生故障(即程序帶非零錯誤代碼退出、異常終止或逾時)時,它将自動進入fail
狀态,并記錄其退出代碼和狀态供管理者自查,直到使用此指令重新啟動或重設服務。fail
-
: 顯示指定機關的所需機關和所需機關,如果沒有指定機關,目标機關會遞歸展開,當傳遞list-dependencies [NAME]
時,所有其他單元也會遞歸展開。--all
Unit File Commands
-
: 列出已安裝的單元檔案,如果指定了一個或多個模式,則隻顯示其檔案名(隻是路徑的最後一個元件)與其中一個比對的單元。list-unit-files [PATTERN...]
-
: 根據指令行上的指定,啟用一個或多個機關檔案或機關檔案執行個體,這将建立許多符号連結,這些符号連結編碼在單元檔案的enable NAME...
部分,建立符号連結後,将重新加載[Install]
配置(以相當于systemd
的方式),以確定立即考慮更改,請注意,這不會同時啟動任何啟用的單元。如果需要,必須為裝置調用單獨的啟動指令,另請注意,在啟用執行個體的情況下,将在安裝位置建立名為daemon reload
的符号連結,但是它們都指向相同的模闆單元檔案,此指令将列印執行的操作,這個輸出可以通過傳遞same as instances
來抑制,請注意,此操作僅為單元建立建議的符号連結,雖然此指令是操作單元配置目錄的推薦方法,但管理者可以通過在目錄中放置或删除符号連結來手動進行其他更改,這對于建立與建議的預設安裝不同的配置特别有用,在這種情況下,管理者必須確定根據需要手動調用--quiet
,以確定将更改考慮在内。啟動單元不應與啟動(激活)單元混淆,就像啟動指令所做的那樣,啟用和啟動裝置是正交的,裝置可以不啟動就啟用,也可以不啟動就啟動,啟用隻需将單元挂接到各種建議的位置,例如,這樣在引導時或插入特定類型的硬體時,單元就會自動啟動。啟動實際上會生成守護程序(對于服務單元),或者綁定套接字(對于套接字單元)等等。根據是否指定了daemon reload
--system
--user
--runtime
,這将為系統、僅為調用使用者、僅為系統的此引導、所有使用者的所有将來登入或僅為此引導啟用該單元,請注意,在最後一種情況下,不會重新加載--global
守護程式配置。systemd
-
: 禁用一個或多個機關,這将從單元配置目錄中删除指向指定單元檔案的所有符号連結,進而撤消disable NAME...
所做的更改,但是請注意,這将删除指向單元檔案的所有符号連結(即包括手動添加),而不僅僅是那些由enable
實際建立的符号連結,在完成單元的禁用之後,此調用隐式地重新加載enable
守護程式配置,請注意,此指令不會隐式停止正在禁用的單元,如果需要這樣做,随後應執行一個額外的停止指令,此指令将列印執行的操作,這個輸出可以通過傳遞systemd
來抑制,這個指令以與--quiet
類似的方式接受enable
--system
--user
--runtime
--global
-
: 檢查是否啟用了任何指定的機關檔案(如啟用),如果至少啟用了一個,則傳回退出代碼 ,否則傳回非零,列印目前啟用狀态is-enabled NAME...
enabled
enabled-runtime
linked
linked-runtime
masked
masked-runtime
static
,要禁止此輸出,請使用disabled
--quiet
-
: 按指令行上的指定,重新啟用一個或多個機關檔案,這是reenable NAME...
disable
的組合,用于将啟用單元的符号連結重置為單元檔案enable
部分中配置的預設值。[Install]
-
: 将指令行中指定的一個或多個機關檔案重置為預設政策檔案中配置的預設值,這與preset NAME...
disable
具有相同的效果,具體取決于機關在預設檔案中的列出方式。使用enable
控制是啟用和禁用單元,還是僅啟用或僅禁用單元,有關預設政策格式的詳細資訊,請參閱--preset-mode=
,有關預設概念的更多資訊,請參閱systemd.preset
文檔。Presetm
-
: 将所有已安裝的單元檔案重置為預設政策檔案中配置的預設值,使用preset-all
控制是啟用和禁用單元,還是僅啟用或僅禁用單元。--preset mode=
-
: 根據指令行上的指定,屏蔽一個或多個機關檔案,這将把這些單元連結到mask NAME...
,使它們無法啟動,這是一個更強大的版本的禁用,因為它禁止各種激活的機關,包括手動激活,小心使用此選項,這允許/dev/null
選項在下次重新啟動系統之前臨時屏蔽。--runtime
-
: 将不在機關檔案搜尋路徑中的機關檔案連結到機關檔案搜尋路徑,這需要到機關檔案的絕對路徑,使用link FILENAME...
可以撤消此操作的效果,此指令的效果是,機關檔案可用于disable
和其他指令,盡管它沒有直接安裝在機關搜尋路徑中。start
-
: 擷取通過get-default
連結指定的預設目标。default.target
-
: 設定預設目标啟動,指令将set-default NAME
連結到給定的機關。default.target
Machine Commands
-
: 列出主機和所有運作的本地容器及其狀态,如果指定了一個或多個模式,則隻顯示與其中一個模式比對的容器。list-machines [PATTERN...]
Job Commands
-
: 列出正在進行的作業,如果指定了一個或多個模式,則僅顯示與其中一個模式比對的單元的作業。list-jobs [PATTERN...]
-
: 取消指令行上由數字作業ID指定的一個或多個作業,如果未指定作業cancel JOB...
,請取消所有挂起的作業。ID
Snapshot Commands
-
: 建立快照,如果指定了快照名稱,則新快照将以該名稱命名,如果未指定任何名稱,則生成自動快照名稱,在這兩種情況下,所使用的快照名稱都列印到标準輸出,除非指定了snapshot [NAME]
,快照是指--quiet
的已儲存狀态,它本身作為一個單元來實作,這個單元是用這個指令動态生成的,并且依賴于當時所有活動的單元,稍後,使用者可以使用快照單元上的隔離指令傳回到該狀态,快照僅用于儲存和還原正在運作或已停止的單元,它們不儲存systemd manager
還原任何其他狀态,快照是動态的,在重新啟動時丢失。/
-
: 删除之前用delete PATTERN...
建立的快照。snapshot
Environment Commands
-
: 轉儲show-environment
環境塊,環境塊将以适合源代碼到systemd manager
腳本的直接形式轉儲,此環境塊将傳遞給管理器生成的所有程序。shell
-
: 按照指令行上的指定,設定一個或多個set-environment VARIABLE=VALUE...
環境變量。systemd manager
-
: 取消設定一個或多個unset-environment VARIABLE...
環境變量,如果隻指定了變量名,則無論其值如何,都将删除該變量名,如果指定了一個變量和一個值,則僅當該變量具有指定的值時才會删除該變量。systemd manager
-
: 将客戶機上設定的所有、一個或多個環境變量導入import-environment VARIABLE...
環境塊,如果沒有傳遞任何參數,則導入整個環境塊,否則,應傳遞一個或多個環境變量名的清單,然後将其用戶端值導入到管理器的環境塊中。systemd manager
Manager Lifecycle Commands
-
: 重新加載daemon-reload
配置,這将重新加載所有單元檔案并重新建立整個依賴關系樹,在重新加載守護程序時,systemd manager
代表使用者配置偵聽的所有套接字都将保持可通路狀态,此指令不應與systemd
load
指令混淆。reload
-
: 重新執行daemon-reexec
,這将序列化管理器狀态,重新執行程序并再次反序列化狀态,除了調試和包更新之外,這個指令沒有什麼用處,有時,作為一個重載守護程序,它可能會有所幫助,當守護程序被重新執行時,代表使用者配置偵聽的所有套接字systemd manager
都将保持可通路狀态。systemd
System Commands
-
: 檢查系統是否正在運作,當系統完全啟動并運作時,傳回is-system-running
,這意味着不處于啟動、關閉或維護模式,否則傳回失敗,此外,目前狀态以短字元串形式列印到标準輸出,使用success
可以抑制此狀态字元串的輸出。--quiet
-
: 進入預設模式,這主要等效于隔離default
default.target
-
: 進入救援模式,這主要相當于隔離rescue
,但也會向所有使用者列印牆消息。rescue.target
-
: 進入緊急模式,這在大多數情況下等效于隔離emergency
,但也會向所有使用者顯示隔離牆消息。Emergency.target
-
: 關閉并停止系統,這主要等效于啟動halt
,但還會向所有使用者顯示一條牆消息,如果與halt.target --irreversible
結合使用,則将跳過所有正在運作的服務的關閉,但是将終止所有程序,并且将所有檔案系統解除安裝或以隻讀方式裝載,然後立即停止系統,如果兩次指定--force
,将立即執行該操作,而不會終止任何程序或解除安裝任何檔案系統,這可能會導緻資料丢失。--force
-
: 關閉并關閉系統電源,這主要等效于啟動poweroff
poweroff.target --irreversible
結合使用,将跳過所有正在運作的服務的關閉,但是将終止所有程序,并且将所有檔案系統解除安裝或以隻讀方式裝載,然後立即關閉電源,如果兩次指定--force
--force
-
: 關閉并重新啟動系統,這主要等同于啟動reboot [arg]
reboot.target --irreversible
結合使用,将跳過所有正在運作的服務的關閉,但是将終止所有程序,并且将所有檔案系統解除安裝或以隻讀方式裝載,然後立即重新開機,如果兩次指定--force
,将立即執行該操作,而不會終止任何程序或解除安裝任何檔案系統,這可能會導緻資料丢失,如果給出了可選參數--force
,它将作為可選參數傳遞給arg
系統調用,該值是體系結構和固件特定的,例如,reboot
可用于觸發系統恢複,而recovery
可用于觸發fota
更新。firmware over the air
-
: 通過kexec
關閉并重新啟動系統,這主要等效于啟動kexec
kexec.target --irreversible
結合使用,則将跳過所有正在運作的服務的關閉,但是将終止所有程序,并且将所有檔案系統解除安裝或以隻讀方式裝載,然後立即重新開機。--force
-
: 要求系統管理者退出,僅使用者服務管理器支援此功能,即與exit
選項結合使用,否則将失敗。--user
-
: 挂起系統,這将觸發特殊的suspend
目标的激活。suspend.target
-
: 休眠系統,這将觸發特殊的hibernate
hibernate.target
-
: 休眠并挂起系統。這将觸發特殊的hybrid-sleep
hybrid-sleep.target
-
: 切換到另一個根目錄,并在其下執行新的系統管理器程序,這旨在用于初始switch-root ROOT [INIT]
磁盤RAM
,并将從initrd
的系統管理器程序,也稱為initrd
程序,過渡到主系統管理器程序,該調用有兩個參數,要成為新根目錄的目錄,以及要在其下以init
執行的新系統管理器二進制檔案的路徑,如果省略後者或為空字元串,則将自動生成PID 1
二進制檔案搜尋并用作systemd
,如果省略了系統管理器路徑或等于空字元串,則将init
的系統管理器程序的狀态傳遞給主系統管理器,這允許稍後對initrd
引導中涉及的服務的狀态進行自查。initrd
UNIT檔案配置
UNIT檔案類型
Unit
檔案統一了過去各種不同的系統資源配置格式,例如服務的啟動、停止、定時任務、裝置自動挂載、網絡配置、裝置配置、虛拟記憶體配置等,而
Systemd
通過不同的通過檔案的字尾名來區分這些配置檔案,
.service
檔案便是其中最常用的一種,下面是
Systemd
所支援的
12
種
Unit
檔案類型。
-
: 用于控制自動挂載檔案系統,自動挂載即當某一目錄被通路時系統自動挂載該目錄,這類.automount
取代了傳統unit
系統的Linux
相應功能。autofs
-
: 對應.device
目錄下裝置,主要用于定義裝置之間的依賴關系。/dev
-
: 定義系統結構層次中的一個挂載點,可以替代過去的.mount
配置檔案。/etc/fstab
-
: 用于監控指定目錄變化,并觸發其他.path
運作。unit
-
: 這類.scope
檔案不是使用者建立的,而是unit
運作時自己産生的,描述一些系統服務的分組資訊。Systemd
-
: 封裝守護程序的啟動、停止、重新開機和重載等操作,是最常見的一種.service
類型。unit
-
: 用于描述.slice
的一些資訊,極少使用到,一般使用者就忽略它吧。cgroup
-
: 這種.snapshot
其實是unit
指令建立的一個描述systemctl snapshot
運作狀态的快照。Systemd unit
-
: 監控系統或網際網路中的.socket
消息,用于實作基于網絡資料自動觸發服務啟動。socket
-
: 定義一個用于做虛拟記憶體的交換分區。.swap
-
: 用于對.target
進行邏輯分組,引導其他unit
的執行,它替代了unit
中運作級别的作用,并提供更靈活的基于特定裝置事件的啟動方式,例如SysV
相當于過去的運作級别multi-user.target
,而5
在有藍牙裝置接入時就會被觸發。bluetooth.target
-
: 封裝由.timer
的裡面由時間觸發的動作, 替代了system
的功能。crontab
配置目錄
Unit
檔案按照
Systemd
約定,應該被放置在指定的
3
個系統目錄之一,這
3
個目錄是有優先級的,在下面指定的位置優先級依次遞減,是以在幾個目錄中有同名檔案的時候,隻有優先級最高的目錄裡的那個會被使用。
-
: 系統或使用者提供的配置檔案。/etc/systemd/system
-
: 軟體運作時生成的配置檔案。/run/systemd/system
-
: 系統或第三方軟體安裝時添加的配置檔案。/usr/lib/systemd/system
Service檔案字段
通常我們隻需要配置
.service
檔案即可,
.service
分為三個字元。
Unit段
這些配置中,除了
Description
外,都能夠被添加多次,例如
After
參數可以使用空格分隔指定所有值,也可以使用多個
After
參數,在每行參數中指定一個值。
-
: 一段描述這個Description
檔案的文字,通常隻是簡短的一句話。Unit
-
: 指定服務的文檔,可以是一個或多個文檔的Documentation
路徑。URL
-
: 依賴的其他Requires
清單,列在其中的Unit
子產品會在這個服務啟動的同時被啟動,并且如果其中有任意一個服務啟動失敗,這個服務也會被終止。Unit
-
Wants
相似,但隻是在被配置的這個Requires
啟動時,觸發啟動列出的每個Unit
子產品,而不去考慮這些子產品啟動是否成功。Unit
-
After
相似,但會在後面列出的所有子產品全部啟動完成以後,才會啟動目前的服務。Requires
-
Before
相反,在啟動指定的任一個子產品之前,都會首先確定目前服務已經運作。After
-
BindsTo
相似,但是一種更強的關聯,啟動這個服務時會同時啟動列出的所有子產品,當有子產品啟動失敗時終止目前服務,反之,隻要列出的子產品全部啟動以後,也會自動啟動目前服務。并且這些子產品中有任意一個出現意外結束或重新開機,這個服務會跟着終止或重新開機。Requires
-
: 這是一個PartOf
作用的子集,僅在列出的任何子產品失敗或重新開機時,終止或重新開機目前服務,而不會随列出子產品的啟動而啟動。BindTo
-
: 當這個子產品啟動失敗時,就自動啟動列出的每個子產品。OnFailure
-
: 與這個子產品有沖突的子產品,如果列出子產品中有已經在運作的,這個服務就不能啟動,反之亦然。Conflicts
Install段
這個段中的配置與
Unit
有幾分相似,但是這部配置設定置需要通過
systemctl enable
指令來激活,并且可以通過
systemctl disable
指令禁用,另外這部配置設定置的目标子產品通常是特定啟動級别的
.target
檔案,用來使得服務在系統啟動時自動運作。
-
: 和前面的WantedBy
作用相似,隻是後面列出的不是服務所依賴的子產品,而是依賴目前服務的子產品。Wants
-
RequiredBy
作用相似,同樣後面列出的不是服務所依賴的子產品,而是依賴目前服務的子產品。Requires
-
: 當這個服務被Also
時,将自動enable/disable
後面列出的每個子產品。enable/disable
Service段
這個段是
.service
檔案獨有的,也是對于服務配置最重要的部分,這部分的配置選項非常多,主要分為服務生命周期控制和服務上下文配置兩個方面,下面是一些常用的配置,另外還有一些限制特定服務可用的系統資源量,例如
CPU
、程式堆棧,檔案句柄數量,子程序數量等等,可參考
Linux
文檔資源配額。
-
: 服務的類型,常用的有Type
simple
,預設的forking
類型可以适應于絕大多數的場景,是以一般可以忽略這個參數的配置,而如果服務程式啟動後會通過simple
系統調用建立子程序,然後關閉應用程式本身程序的情況,則應該将fork
的值設定為Type
,否則forking
将不會跟蹤子程序的行為,而認為服務已經退出。systemd
-
: 值為RemainAfterExit
true
,也可以寫false
yes
no
,當配置值為false
時,true
隻會負責啟動服務程序,之後即便服務程序退出了,systemd
仍然會認為這個服務是在運作中的,這個配置主要是提供給一些并非常駐記憶體,而是啟動注冊後立即退出然後等待消息按需啟動的特殊類型服務使用。systemd
-
: 這個參數是幾乎每個ExecStart
檔案都會有的,指定服務啟動的主要指令,在每個配置檔案中隻能使用一次。.service
-
: 指定在啟動執行ExecStartPre
的指令前的準備工作,可以有多個,所有指令會按照檔案中書寫的順序依次被執行。ExecStart
-
ExecStartPost
的指令後的收尾工作,也可以有多個。ExecStart
-
: 啟動服務時的等待的秒數,如果超過這個時間服務仍然沒有執行完所有的啟動指令,則TimeoutStartSec
會認為服務自動失敗,這一配置對于使用systemd
容器托管的應用可能十分重要,由于Docker
第一次運作時可以能會需要從網絡下載下傳服務的鏡像檔案,是以造成比較嚴重的延時,容易被Docker
誤判為啟動失敗而殺死,通常對于這種服務,需要将systemd
的值指定為 ,進而關閉逾時檢測。TimeoutStartSec
-
: 停止服務所需要執行的主要指令。ExecStop
-
: 指定在ExecStopPost
指令執行後的收尾工作,也可以有多個。ExecStop
-
: 停止服務時的等待的秒數,如果超過這個時間服務仍然沒有停止,TimeoutStopSec
會使用systemd
信号強行殺死服務的程序。SIGKILL
-
: 這個值用于指定在什麼情況下需要重新開機服務程序,常用的值有Restart
no
on-success
on-failure
on-abnormal
on-abort
,預設值為always
,即不會自動重新開機服務。no
-
: 如果服務需要被重新開機,這個參數的值為服務被重新開機前的等待秒數。RestartSec
-
: 重新加載服務所需執行的主要指令。ExecReload
-
: 為服務添加環境變量。Environment
-
: 指定加載一個包含服務所需的環境變量清單的檔案,檔案中的每一行都是一個環境變量的定義。EnvironmentFile
-
: 服務的程序優先級,值越小優先級越高,預設為 ,Nice
為最高優先級,-20
為最低優先級。19
-
: 指定服務的工作目錄。WorkingDirectory
-
: 指定服務程序的根目錄RootDirectory
,如果配置了這個參數後,服務将無法通路指定目錄以外的任何檔案。/
-
: 指定運作服務的使用者,會影響服務對本地檔案系統的讀寫執行權限。User
-
: 指定運作服務的使用者組,會影響服務對本地檔案系統的通路權限。Group
-
: 屬于設定單元的啟動頻率限制,用于設定時長,預設情況下,一個單元在StartLimitIntervalSec
秒内最多允許啟動10
次。5
-
: 屬于設定單元的啟動頻率限制,用于設定在一段給定的時長内,最多允許啟動多少次,預設情況下,一個單元在StartLimitBurst
10
5
檔案示例
[Unit]
Description=OpenBSD Secure Shell server
After=network.target auditd.service
ConditionPathExists=!/etc/ssh/sshd_not_to_be_run
[Service]
EnvironmentFile=-/etc/default/ssh
ExecStartPre=/usr/sbin/sshd -t
ExecStart=/usr/sbin/sshd -D $SSHD_OPTS
ExecReload=/usr/sbin/sshd -t
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
RestartPreventExitStatus=255
Type=notify
RuntimeDirectory=sshd
RuntimeDirectoryMode=0755
[Install]
WantedBy=multi-user.target
Alias=sshd.service
示例
開機運作服務。
systemctl enable nginx.service
查詢服務是否開機啟動。
systemctl is-enabled nginx.service
取消開機運作。
systemctl disable nginx.service
啟動服務。
systemctl start nginx.service
停止服務。
systemctl stop nginx.service
重新開機服務。
systemctl restart nginx.service
重新加載服務配置檔案,修改配置檔案後需要首先執行
systemctl daemon-reload
systemctl reload nginx.service
查詢服務運作狀态。
systemctl status nginx.service
顯示啟動失敗的服務。
systemctl --failed
systemctl list-units --state failed
重置單元的啟動頻率計數器。
systemctl reset-failed
重新加載所有被修改過的服務配置,否則配置不會生效,當然實際上該指令還會完成很多事情,例如重新生成依賴樹。
systemctl daemon-reload
輸出所有單元。
systemctl list-units
列出所有單元狀态概覽。
systemctl status
檢視已激活的服務。
systemctl list-units -t service
檢視所有已安裝服務。
systemctl list-unit-files
檢查
nginx
服務的所有配置細節。
systemctl show nginx.service
擷取
nginx
服務的依賴性清單。
systemctl list-dependencies nginx.service
檢視環境變量。
systemctl show-environment
重新開機系統。
systemctl reboot
關閉系統。
systemctl poweroff
CPU
停止工作。
systemctl halt
暫停系統。
systemctl suspend
讓系統進入冬眠狀态。
systemctl hibernate
讓系統進入互動式休眠狀态。
sudo systemctl hybrid-sleep
啟動進入救援狀态,即單使用者狀态。
systemctl rescue
每日一題
https://github.com/WindrunnerMax/EveryDay
參考
https://www.cnblogs.com/tsdxdx/p/7288490.html
https://www.cnblogs.com/chjbbs/p/6288592.html
https://www.geeksforgeeks.org/systemctl-in-unix/
http://www.jinbuguo.com/systemd/systemd.unit.html
https://blog.csdn.net/m0_38023255/article/details/78757655
https://www.commandlinux.com/man-page/man1/systemctl.1.html
http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-commands.html