- Deutsch
- English systemctl
- English systemd
- 中文 (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 |