- Deutsch
- English systemd
- English systemctl
- français
- українська
- 中文 (zh-CN)
- 繁體中文 (zh-TW)
SYSTEMCTL(1) | systemctl | SYSTEMCTL(1) |
NAME¶
systemctl - 控制 systemd 系統與服務管理器
SYNOPSIS¶
systemctl [OPTIONS...] COMMAND [NAME...]
描述¶
systemctl 可用於檢查和控制 systemd(1) 系統與服務管理器的狀態。
選項¶
能夠識別的命令列選項如下:
-t, --type=
在列出單元時,如果使用了此選項, 那麼表示只列出指定型別的單元, 否則將列出所有型別的單元。
此外,作為特例,使用 --type=help 表示在列出所有可用的單元型別之後退出。
--state=
此外,作為特例,使用 --state=help 表示在列出所有可用的單元狀態之後退出。
-p, --property=
不帶引數的 systemctl show 命令 將會顯示管理器(systemd)自身的屬性(參見 systemd-system.conf(5) 手冊)。
不同型別的單元擁有不同的屬性集, 指定任意一個單元(即使並不存在),都可以檢視此類單元的所有屬性。 類似的,即使指定了一個不存在的任務(job),也能檢視任務的所有屬性。 每種單元能夠擁有的屬性集分散在 systemd.unit(5) 手冊 以及此類單元專屬的手冊中,例如 systemd.service(5), systemd.socket(5) 等等。
-a, --all
如果想要列出所有已安裝的單元,請使用 list-unit-files 命令。
-r, --recursive
--reverse
--after
注意,每個 After= 依賴都會自動生成一個對應的 Before= 依賴。 單元之間的先後順序既可以被顯式的明確設定, 也可以由其他指令隱式的自動生成(例如 WantedBy= 或 RequiresMountsFor=)。 無論是隱式自動生成的先後順序, 還是顯式明確設定的先後順序, 都會被 list-dependencies 命令顯示出來。
--before
-l, --full
--value
--show-types
--job-mode=
"fail" 表示當新任務與佇列中已有的任務衝突時,該命令將失敗。 所謂"衝突"的含義是:導致佇列中已有的某個啟動操作轉變為停止操作,或者相反。
"replace" 表示將佇列中衝突的任務替換為新任務。
"replace-irreversibly" 與 "replace" 類似, 不同之處在於將新任務同時標記為"不可撤銷", 也就是即使未來與其他新新增的任務發生衝突也不會被撤消。 注意,這個"不可撤銷"的任務, 仍然可以使用 cancel 命令顯式的撤消。
"isolate" 僅用於啟動操作,表示在該單元啟動之後,所有其他單元都會被停止。 當使用 isolate 命令的時候, 這是預設值,且不能更改。
"flush" 表示撤消佇列中已有的全部任務,然後加入新任務。
"ignore-dependencies" 表示忽略新任務的所有依賴關係(包括先後順序依賴), 立即執行請求的操作。 如果成功, 那麼所有被依賴的單元及先後順序都將被忽略。 僅用於除錯目的,切勿用於常規目的。
"ignore-requirements" 類似於 "ignore-dependencies" , 表示僅忽略必需的依賴(但依然遵守單元之間的先後順序)。
--fail
當與 kill 命令一起使用時, 表示如果沒有任何單元被殺死,那麼將會導致報錯。
-i, --ignore-inhibitors
-q, --quiet
--no-block
--user
--system
--no-wall
--global
--no-reload
--no-ask-password
--kill-who=
-s, --signal=
。
.RE
-f, --force
當與 edit 命令連用時, 表示建立所有尚不存在的指定單元。
當與 halt, poweroff, reboot, kexec 命令連用時,表示跳過單元的正常停止步驟,強制直接執行關機操作。 如果僅使用此選項一次,那麼所有程序都將被強制殺死,並且所有檔案系統都將被解除安裝(或以只讀模式重新掛載)。 這可以算是一種野蠻但還算相對比較安全的快速關機或重啟的方法。 如果連續兩次使用此選項,那麼將既不殺死程序,也不解除安裝檔案系統, 而是直接強制關機或重啟(但 kexec 除外)。 警告:連續兩次使用 --force 選項將會導致資料丟失、檔案系統不一致等不良後果。 注意,如果連續兩次使用 --force 選項,那麼所有操作都將由 systemctl 自己直接執行,而不會與 systemd 程序通訊。 這意味著,即使 systemd 程序已經僵死或者崩潰,連續兩次使用 --force 選項所指定的操作依然能夠執行成功。
--message=
--now
--root=
--runtime
類似的,當與 set-property 命令連用時, 所做的變更亦是臨時的, 這些變更在重啟後亦會丟失。
--preset-mode=
-n, --lines=
-o, --output=
。
.RE
--firmware-setup
--plain
-H, --host=
-M, --machine=
--no-pager
--no-legend
-h, --help
--version
命令¶
模式(PATTERN)引數的語法與檔名匹配語法類似:用"*"匹配任意數量的字元,用"?"匹配單個字元,用"[]"匹配字元範圍。 如果給出了模式(PATTERN)引數,那麼表示該命令僅作用於單元名稱與至少一個模式相匹配的單元。
單元命令¶
list-units [PATTERN...]
這是預設命令。
list-sockets [PATTERN...]
LISTEN UNIT ACTIVATES /dev/initctl systemd-initctl.socket systemd-initctl.service ... [::]:22 sshd.socket sshd.service kobject-uevent 1 systemd-udevd-kernel.socket systemd-udevd.service 5 sockets listed.
注意:因為監聽地址中有可能包含空格, 所以不適合使用程式分析該命令的輸出。
參見 --show-types, --all, --state= 選項。
list-timers [PATTERN...]
參見 --all 與 --state= 選項。
start PATTERN...
如果某個單元未被啟動,又沒有處於失敗(failed)狀態, 那麼通常是因為該單元沒有被載入,所以根本沒有被模式匹配到。 此外,對於從模板例項化而來的單元,因為 systemd 會在其尚未啟動前忽略它們, 又因為模式(PATTERN)引數僅能匹配已載入單元的"主名稱"(不含單元的"別名"), 所以,在這個命令中使用包含萬用字元的模式並沒有多少實際意義。
stop PATTERN...
reload PATTERN...
不要將此命令與 daemon-reload 命令混淆。
restart PATTERN...
try-restart PATTERN...
reload-or-restart PATTERN...
try-reload-or-restart PATTERN...
isolate NAME
這類似於傳統上切換SysV執行級的概念。 該命令會立即停止所有在新目標單元中不需要的程序, 這其中可能包括當前正在執行的圖形環境以及正在使用的終端。
注意,該命令僅可用於 AllowIsolate=yes 的單元。參見 systemd.unit(5) 手冊。
kill PATTERN...
is-active PATTERN...
is-failed PATTERN...
status [PATTERN...|PID...]
此命令用於輸出人類易讀的結果,不要將其用於程式分析(應該使用 show 命令)。 除非使用了 --lines 與 --full 選項, 否則預設只輸出10行日誌, 並且超長的部分會被省略號截斷。此外, journalctl --unit=NAME 或 journalctl --user-unit=NAME 也會對超長的訊息使用類似的省略號截斷。
show [PATTERN...|JOB...]
cat PATTERN...
set-property NAME ASSIGNMENT...
例如: systemctl set-property foobar.service CPUShares=777
注意,此命令可以同時修改多個屬性值, 只需依次將各個屬性用空格分隔即可。
與單元檔案中的規則相同, 設為空表示清空當前已存在的列表。
help PATTERN...|PID...
reset-failed [PATTERN...]
list-dependencies [NAME]
預設情況下,僅以遞迴方式顯示 target 單元的依賴關係樹,而對於其他型別的單元,僅顯示一層依賴關係(不遞迴)。 但如果使用了 --all 選項, 那麼將對所有型別的單元都強制遞迴的顯示完整的依賴關係樹。
還可以使用 --reverse, --after, --before 選項指定僅顯示特定型別的依賴關係。
單元檔案命令¶
list-unit-files [PATTERN...]
enable NAME..., enable PATH...
如果此命令的引數是一個有效的單元名稱(NAME),那麼將自動搜尋所有單元目錄。 如果此命令的引數是一個單元檔案的絕對路徑(PATH),那麼將直接使用指定的單元檔案。 如果引數是一個位於標準單元目錄之外的單元檔案, 那麼將會在標準單元目錄中額外建立一個指向此單元檔案的軟連線, 以確保該單元檔案能夠被 start 之類的命令找到。
除非使用了 --quiet 選項, 否則此命令還會顯示對檔案系統所執行的操作(Created symlink ...)。
此命令是維護 .{wants,requires}/ 目錄與單元別名的首選方法。 注意,此命令僅會按照單元檔案中 "[Install]" 小節預設的名稱建立軟連結。 另一方面,系統管理員亦可手動建立所需的軟連結, 特別是在需要建立不同於預設軟連結名稱的時候。 不過需要注意的是,系統管理員必須在建立完軟連線之後手動執行 daemon-reload 命令, 以確保所做的變更立即生效。
不要將此命令與 start 命令混淆,它們是相互獨立的命令: 可以啟動一個尚未啟用的單元,也可以啟用一個尚未啟動的單元。 enable 命令只是設定了單元的啟動鉤子(透過建立軟連結), 例如在系統啟動時或者某個硬體插入時,自動啟動某個單元。 而 start 命令則是具體執行單元的啟動操作, 例如對於服務單元來說就是啟動守護程序,而對於套接字單元來說則是繫結套接字,等等。
若與 --user 選項連用,則表示變更僅作用於使用者例項,否則預設作用於系統例項(相當於使用 --system 選項)。 若與 --runtime 選項連用,則表示僅作臨時性變更(重啟後所有變更都將丟失),否則預設為永久性變更。 若與 --global 選項連用,則表示變更作用於所有使用者(在全域性使用者單元目錄上操作),否則預設僅作用於當前使用者(在私有使用者單元目錄上操作)。 注意,當與 --runtime 選項連用時,systemd 守護程序不會重新載入自身的配置。
不可將此命令應用於已被 mask 命令遮蔽的單元,否則將會導致錯誤。
disable NAME...
此命令的引數僅能接受單元的名字,而不能接受單元檔案的路徑。
除了停用引數中明確指定的單元之外,那些在被停用單元 "[Install]" 小節的 Also= 選項中列出的所有單元,也同樣會被停用。 也就是說,這個停用動作是沿著 Also= 選項不斷傳遞的。
刪除完軟連線之後, systemd 將會自動重新載入自身的配置(相當於執行 daemon-reload 命令),以確保所做的變更立即生效。 注意,除非同時使用了 --now 選項(相當於同時執行 stop 命令), 否則停用一個單元並不會導致該單元被停止。
除非使用了 --quiet 選項, 否則此命令還會顯示對檔案系統所執行的操作(Removed symlink ...)。
有關 --system, --user, --runtime, --global 選項的影響,參見上面對 enable 命令的解釋。
reenable NAME...
preset NAME...
可以使用 --preset-mode= 選項控制如何參照預設檔案: 既啟用又停用、僅啟用、僅停用
如果指定單元的 "[Install]" 小節不包含必要的啟用資訊, 那麼此命令將會悄無聲息的忽略該單元。
有關預設檔案的更多說明,詳見 systemd.preset(5) 手冊與 Preset[1] 文件。
preset-all
可以使用 --preset-mode= 選項控制如何參照預設檔案: 既啟用又停用、僅啟用、僅停用
is-enabled NAME...
Table 1. is-enabled 命令的輸出
狀態 | 含義 | 返回值 |
"enabled" | 已經透過 /etc/systemd/system/*.{wants,requires}/ 目錄下的軟連線被永久啟用 | 0 |
"enabled-runtime" | 已經透過 /run/systemd/system/*.{wants,requires}/ 目錄下的軟連線被臨時啟用 | 0 |
"linked" | 雖然單元檔案本身不在標準單元目錄中,但是指向此單元檔案的一個或多個軟連線已經存在於 /etc/systemd/system/ 永久目錄中 | > 0 |
"linked-runtime" | 雖然單元檔案本身不在標準單元目錄中,但是指向此單元檔案的一個或多個軟連線已經存在於 /run/systemd/system/ 臨時目錄中 | > 0 |
"masked" | 已經被 /etc/systemd/system/ 目錄永久遮蔽(軟連線指向 /dev/null 檔案),因此 start 操作會失敗 | > 0 |
"masked-runtime" | 已經被 /run/systemd/systemd/ 目錄臨時遮蔽(軟連線指向 /dev/null 檔案),因此 start 操作會失敗 | > 0 |
"static" | 尚未被啟用,並且單元檔案的 "[Install]" 小節中沒有可用於 enable 命令的選項 | 0 |
"indirect" | 尚未被啟用,但是單元檔案的 "[Install]" 小節中 Also= 選項的值列表非空(也就是列表中的某些單元可能已被啟用) | 0 |
"disabled" | 尚未被啟用,但是單元檔案的 "[Install]" 小節中存在可用於 enable 命令的選項 | > 0 |
"generated" | 單元檔案是被單元生成器動態生成的(參見 systemd.generator(7) 手冊)。被生成的單元檔案可能並未被直接啟用,而是被單元生成器隱含的啟用了。 | 0 |
"transient" | 單元檔案是被執行時API動態臨時生成的。該臨時單元可能並未被啟用。 | 0 |
"bad" | 單元檔案不正確或者出現其他錯誤。 is-enabled 不會返回此狀態,而是會顯示一條出錯資訊。 list-unit-files 命令有可能會顯示此單元。 | > 0 |
mask NAME...
unmask NAME...
link PATH...
revert NAME...
從效果上看,該命令相當於撤銷 edit, set-property, mask 命令所做的操作, 並且將指定單元的配置恢復成軟體包提供的初始值。
add-wants TARGET NAME..., add-requires TARGET NAME...
關於 --system, --user, --runtime, --global 選項的影響, 參見前文對 enable 命令的解釋。
edit NAME...
若使用了 --full 選項,則表示使用新編輯的單元檔案完全取代原始單元檔案, 否則預設將新編輯的單元配置片段(位於 .d/ 目錄)附加到原始單元檔案的末尾。
如果使用了 --force 選項,並且某些指定的單元檔案不存在, 那麼將會強制開啟一個新的空單元檔案以供編輯。
注意,在編輯過程中,編輯器實際操作的只是臨時檔案, 僅在編輯器正常退出時,臨時檔案的內容才會被實際寫入到目標檔案中。
注意,如果在編輯器退出時,臨時檔案的內容為空, 則表示取消編輯動作(而不是寫入一個空檔案)。
編輯動作完成之後,systemd 將會自動重新載入自身的配置(相當於執行 daemon-reload 命令),以確保所做的變更立即生效。
關於 --system, --user, --runtime, --global 選項的影響, 參見前文對 enable 命令的解釋。
注意:(1)該命令不可用於編輯遠端主機上的單元檔案。 (2)禁止在編輯 /etc 中的原始單元檔案時使用 --runtime 選項, 因為 /etc 中的單元檔案優先順序高於 /run 中的單元檔案。
get-default
set-default NAME
機器命令¶
list-machines [PATTERN...]
任務(job)命令¶
list-jobs [PATTERN...]
cancel JOB...
環境變數命令¶
show-environment
set-environment VARIABLE=VALUE...
unset-environment VARIABLE...
import-environment [VARIABLE...]
systemd 生命週期命令¶
daemon-reload
不要將此命令與 reload 命令混淆。
daemon-reexec
系統命令¶
is-system-running
Table 2. is-system-running 命令的輸出
狀態 | 含義 | 返回值 |
initializing | 啟動的早期階段。也就是尚未到達 basic.target/rescue.target/emergency.target 之前的階段。 | > 0 |
starting | 啟動的晚期階段。 也就是任務佇列首次達到空閒之前的階段, 或者已經啟動到了某個救援 target 中。 | > 0 |
running | 完成了全部的啟動操作,整個系統已經處於完全可用的狀態, 並且沒有任何單元處於失敗(failed)狀態。 | 0 |
degraded | 完成了全部的啟動操作,系統已經可用, 但是某些單元處於失敗(failed)狀態。 | > 0 |
maintenance | 啟動了 rescue.target/emergency.target 目標。 | > 0 |
stopping | 系統正處於關閉過程中。 | > 0 |
offline | 整個系統已經處於完全可用的狀態, 但init程序(PID=1)不是 systemd | > 0 |
unknown | 由於資源不足或未知原因, 無法檢測系統的當前狀態 | > 0 |
default
rescue
emergency
halt
poweroff
reboot [arg]
若給出了可選的 arg 引數, 那麼將會被作為可選引數傳遞給 reboot(2) 系統呼叫。 其取值範圍依賴於特定的硬體平臺。 例如 "recovery" 有可能表示觸發系統恢復動作, 而 "fota" 有可能表示 “firmware over the air” 韌體更新。
kexec
exit [EXIT_CODE]
此命令相當於 poweroff 命令, 但僅可用於使用者例項(也就是以 --user 選項啟動的例項)或容器, 否則會執行失敗。
switch-root ROOT [INIT]
suspend
hibernate
hybrid-sleep
引數語法¶
單元命令的引數可能是一個單獨的單元名稱(NAME), 也可能是多個匹配模式(PATTERN...)。 對於第一種情況,如果省略單元名稱的字尾,那麼預設以 ".service" 為字尾, 除非那個命令只能用於某種特定型別的單元。例如
# systemctl start sshd
等價於
# systemctl start sshd.service
, 而
# systemctl isolate default
等價於
# systemctl isolate default.target
,因為 isolate 命令只能用於 .target 單元。 注意,裝置檔案路徑(絕對路徑)會自動轉化為 device 單元名稱,其他路徑(絕對路徑)會自動轉化為 mount 單元名稱。 例如,如下命令
# systemctl status /dev/sda # systemctl status /home
分別等價於
# systemctl status dev-sda.device # systemctl status home.mount
對於第二種情況,可以在模式中使用shell風格的匹配符,對所有已載入單元的主名稱(primary name)進行匹配。 如果沒有使用匹配符並且省略了單元后綴,那麼處理方式與第一種情況完全相同。 這就意味著:如果沒有使用匹配符,那麼該模式就等價於一個單獨的單元名稱(NAME),只表示一個明確的單元。 如果使用了匹配符,那麼該模式就可以匹配任意數量的單元(包括零個)。
模式使用 fnmatch(3) 語法, 也就是可以使用shell風格的 "*", "?", "[]" 匹配符(詳見 glob(7))。 模式將基於所有已載入單元的主名稱(primary name)進行匹配, 如果某個模式未能匹配到任何單元,那麼將會被悄無聲息的忽略掉。 例如
# systemctl stop sshd@*.service
命令將會停止所有 sshd@.service 的例項單元。 注意,單元的別名(軟連線)以及未被載入的單元,不在匹配範圍內(也就是不作為匹配目標)。
對於單元檔案命令,NAME 引數必須是單元名稱(完整的全稱或省略了字尾的簡稱)或單元檔案的絕對路徑。 例如:
# systemctl enable foo.service
或
# systemctl link /path/to/foo.service
退出狀態¶
返回值為 0 表示成功, 非零返回值表示失敗程式碼。
環境變數¶
$SYSTEMD_EDITOR
$SYSTEMD_PAGER
$SYSTEMD_LESS
參見¶
systemd(1), journalctl(1), loginctl(1), machinectl(1), systemd.unit(5), systemd.resource-control(5), systemd.special(7), wall(1), systemd.preset(5), systemd.generator(7), glob(7)
NOTES¶
- 1.
- Preset
跋¶
本頁面中文版由中文 man 手冊頁計劃提供。
翻譯人員:金步國
金步國作品集:http://www.jinbuguo.com
中文 man
手冊頁計劃:https://github.com/man-pages-zh/manpages-zh
systemd 231 |