命令行手册

Man » systemctl 在线手册 - systemctl 手册页的详细在线文档

🌍
systemctl - 控制 systemd 系统和服务管理器

概要

systemctl [选项...] 命令 [单元...]

描述

systemctl 可用于检查和控制“systemd”系统和服务管理器的状态。请参阅 [systemd]({filename}../../systemd)(1),了解有关此工具管理的基本概念和功能的介绍。

命令

以下命令将被理解:

单元命令(检查和修改)

list-units [模式...]

列出 systemd 当前在内存中拥有的单元。这包括直接引用或通过依赖关系引用的单元、由应用程序以编程方式引用的单元,或过去处于活动状态但已失败的单元。默认情况下,仅显示处于活动状态、具有待处理作业或已失败的单元;这可以通过 --all 选项进行更改。如果指定了一个或多个模式,则仅显示与其中一个模式匹配的单元。显示的单元还会根据 --type= 和 --state= 选项进行过滤(如果指定了这些选项)。

请注意,此命令不显示单元模板,而仅显示单元模板的实例。未实例化的单元模板是不可运行的,因此永远不会显示在此命令的输出中。这意味着 [email protected] 永远不会在此列表中显示——除非已实例化,例如作为 _. 使用 list-unit-files(参见下文)来列出已安装的单元模板文件。

生成类似于以下内容的输出

单元                         加载   活动  子     描述
sys-module-fuse.device       已加载  活动  已连接 /sys/module/fuse
-.mount                      已加载  活动  已挂载 根挂载点
boot-efi.mount               已加载  活动  已挂载 /boot/efi
systemd-journald.service     已加载  活动  正在运行 日志服务
systemd-logind.service       已加载  活动  正在运行 登录服务
● \_            已加载  失败  失败  用户管理器,UID 为 1000
...
systemd-tmpfiles-clean.timer 已加载  活动  等待  每日清理临时目录

加载 = 表示单元定义是否已正确加载。
活动 = 单元激活的高级状态,即 SUB 的概括。
子 = 单元激活的低级状态,具体值取决于单元类型。

已列出 123 个已加载的单元。 使用 --all 可以查看已加载但未活动的单元。

要显示所有已安装的单元文件,请使用“systemctl list-unit-files”。

如果终端支持,则标题和给定类型中的最后一个单元将加下划线。 在已禁用的、未找到的或以其他方式失败的服务旁边会显示彩色圆点。


“LOAD”列显示加载状态,可以是“loaded”(已加载)、“not-found”(未找到)、“bad-setting”(配置错误)、“error”(错误)或“masked”(已屏蔽)。“ACTIVE”列显示单元的一般状态,可以是以下状态之一:

表 1. 单元“ACTIVE”状态

┌──────────────┬─────────────────────────────────────┐
│ 状态        │ 描述                                  │
├──────────────┼─────────────────────────────────────┤
│ active       │ 已启动、已绑定、已插拔……,具体取决于单元类型。│
├──────────────┼─────────────────────────────────────┤
│ inactive     │ 已停止、已解绑、已拔出……,具体取决于单元类型。│
├──────────────┼─────────────────────────────────────┤
│ failed       │ 类似于“inactive”,但单元以某种方式失败(进程在退出时返回错误代码、崩溃、某个操作超时,或在多次重启后失败)。│
├──────────────┼─────────────────────────────────────┤
│ activating   │ 从“inactive”状态变为“active”状态。       │
├──────────────┼─────────────────────────────────────┤
│ deactivating │ 从“active”状态变为“inactive”状态。       │
├──────────────┼─────────────────────────────────────┤
│ maintenance  │ 单元处于“inactive”状态,并且正在进行维护操作。│
├──────────────┼─────────────────────────────────────┤
│ reloading    │ 单元处于“active”状态,并且正在重新加载其配置。│
├──────────────┼─────────────────────────────────────┤
│ refreshing   │ 单元处于“active”状态,并且正在其命名空间中激活新的挂载点。│
└──────────────┴─────────────────────────────────────┘

“SUB” 列显示特定单元类型的单元的详细状态,可能的值因单元类型而异。可能的“LOAD”、“ACTIVE”和“SUB”状态列表不是固定的,新的 systemd 版本可能会添加和删除值。

可以使用 systemctl --state=help 命令来显示当前可能的值集。

这是默认命令。

list-automounts [PATTERN...]

列出当前在内存中自动挂载单元,按挂载路径排序。如果指定了一个或多个 PATTERN,则仅显示匹配其中一个 PATTERN 的自动挂载单元。输出类似于:

WHAT        WHERE                    MOUNTED IDLE TIMEOUT UNIT
/dev/sdb1   /mnt/test                no      120s         mnt-test.automount
binfmt_misc /proc/sys/fs/binfmt_misc yes     0            proc-sys-fs-binfmt_misc.automount

2个自动挂载单元已列出。

另请参阅 --show-types--all--state=

添加到版本 252。

list-paths [PATTERN...]

列出当前在内存中的路径单元,按路径排序。如果指定了一个或多个 PATTERN,则仅显示匹配其中一个 PATTERN 的路径单元。输出类似于:

PATH                           CONDITION         UNIT                               ACTIVATES
/run/systemd/ask-password      DirectoryNotEmpty systemd-ask-password-plymouth.path systemd-ask-password-plymouth.service
/run/systemd/ask-password      DirectoryNotEmpty systemd-ask-password-wall.path     systemd-ask-password-wall.service
/var/cache/cups/org.cups.cupsd PathExists        cups.path                          cups.service

3个路径单元已列出。

另请参阅 --show-types--all--state=

添加到版本 254。

list-sockets [PATTERN...]

列出当前在内存中的套接字单元,按侦听地址排序。如果指定了一个或多个 PATTERN,则仅显示匹配其中一个 PATTERN 的套接字单元。输出类似于:

LISTEN           UNIT                        ACTIVATES
kobject-uevent 1 systemd-udevd-kernel.socket systemd-udevd.service
/dev/rfkill      systemd-rfkill.socket       systemd-rfkill.service
...

5个套接字单元已列出。

注意:由于地址可能包含空格,因此此输出不适合程序化使用。

另请参阅 --show-types--all--state=

添加到版本 202。

list-timers [PATTERN...]

列出当前在内存中的定时器单元,按它们下次触发的时间排序。如果指定了一个或多个 PATTERN,则仅显示匹配其中一个 PATTERN 的单元。输出类似于:

NEXT                         LEFT          LAST                         PASSED     UNIT                         ACTIVATES
-                            -             Thu 2017-02-23 13:40:29 EST  3 days ago ureadahead-stop.timer        ureadahead-stop.service

Sun 2017-02-26 18:55:42 EST 1min 14s left Thu 2017-02-23 13:54:44 EST 3 days ago systemd-tmpfiles-clean.timer systemd-tmpfiles-clean.service Sun 2017-02-26 20:37:16 EST 1h 42min left Sun 2017-02-26 11:56:36 EST 6h ago apt-daily.timer apt-daily.service Sun 2017-02-26 20:57:49 EST 2h 3min left Sun 2017-02-26 11:56:36 EST 6h ago snapd.refresh.timer snapd.refresh.service


NEXT 显示计时器下次运行的时间。

LEFT 显示下次计时器运行之前还剩多少时间。

LAST 显示计时器上次运行的时间。

PASSED 显示自计时器上次运行以来已经过去的时间。

UNIT 显示计时器的名称。

ACTIVATES 显示计时器运行时激活的服务名称。

另请参阅 --all 和 --state=。

新增于版本 209。

is-active PATTERN...

检查指定的任何单元是否处于活动状态(即正在运行)。如果至少有一个处于活动状态,则返回退出代码 0;否则返回非零值。除非指定了 --quiet,否则它还会将当前单元状态打印到标准输出。

is-failed [PATTERN...]

检查指定的任何单元是否处于“失败”状态。如果没有指定单元,则检查是否存在任何失败的单元或循环依赖关系,这对应于 is-system-running 返回的“已降级”状态。如果至少有一个失败,则返回退出代码 0;否则返回非零值。除非指定了 --quiet,否则它还会将当前单元或系统状态打印到标准输出。

新增于版本 197。

status [PATTERN...|PID...]

显示整个系统或一个或多个单元的运行时状态信息,以及来自日志的最新的日志数据。如果没有指定位置参数,并且没有使用 --type=、--state= 或 --failed 提供单元筛选器,则显示整个系统的状态。如果与 --all 结合使用,则显示所有单元的状态。如果指定了位置参数,则将每个位置参数视为单元名称以显示,或 glob 模式以显示名称与该模式匹配的单元,或 PID 以显示包含该 PID 的单元。当使用 --type=、--state= 或 --failed 时,单元还会根据类型和活动状态进行额外筛选。

此函数旨在生成人类可读的输出。如果您正在寻找可以进行计算机解析的输出,请使用 show。默认情况下,此函数仅显示 10 行输出,并且会截断行以适应终端窗口。这可以通过 --lines 和 --full 更改,请参见上方。此外,journalctl --unit=NAME 或 journalctl --user-unit=NAME 使用类似的过滤器来筛选消息,并且可能更方便。

请注意,此操作仅显示运行时状态,即当前单元的调用信息(如果它正在运行),或最近一次的调用信息(如果它不再运行,并且没有从内存中释放)。关于早期调用、之前系统启动中的调用,或已经从内存中释放的调用,可以通过 journalctl --unit= 检索。

systemd 会在必要时隐式加载单元,因此仅仅运行 status 命令会尝试加载文件。因此,该命令不能用于确定某个单元是否已经加载。单元在操作完成后可能会很快被卸载,如果没有任何理由将其保留在内存中。


示例 1. systemctl status 的示例输出

$ systemctl status bluetooth
● bluetooth.service - Bluetooth 服务
已加载:已加载 (/usr/lib/systemd/system/bluetooth.service; 启用; 预设:启用)
活动:活动 (运行) 自 2017-01-04 13:54:04 EST; 1 周 0 天前
文档:man:bluetoothd(8)
主 PID:930 (bluetoothd)
状态:“运行中”
任务:1
内存:648.0K
CPU:435 毫秒
CGroup:/system.slice/bluetooth.service
└─930 /usr/lib/bluetooth/bluetoothd

1 月 12 日 10:46:45 example.com bluetoothd[8900]: 没有足够的可用句柄来注册服务 1 月 12 日 10:46:45 example.com bluetoothd[8900]: 无法注册当前时间服务 1 月 12 日 10:46:45 example.com bluetoothd[8900]: gatt-time-server:输入/输出错误 (5)

该点 ("●") 在支持的终端上使用颜色来快速概括单元的状态。 除了其颜色,其形状还会根据其状态而变化:“非活动”或“维护”状态是 一个白色圆圈 ("○"),“活动”状态是一个绿色点 ("●"),“正在停用”状态是一个白色点,“失败” 或“错误”状态是一个红色叉号 ("×"),“正在重新加载”或“正在刷新”状态是一个绿色顺时针圆圈箭头 ("↻")。

输出中的“已加载:”行将显示“已加载”,如果该单元已加载到内存中。 “已加载:”的其他可能值包括:“错误”,如果加载时出现问题; “未找到”,如果未找到该单元的单元文件;“设置错误”,如果无法解析必需的单元文件 设置;“已屏蔽”,如果单元文件已被屏蔽。除了显示单元文件的路径,此行还会显示启用状态。启用的单元包含在单元之间的依赖关系网络中,因此在启动时或通过其他形式的激活进行启动。请参阅 is-enabled 命令文档中的完整表,其中包含可能的启用状态——包括“已屏蔽”的定义。

“活动:”行显示活动状态。该值为“活动”或“非活动”。“活动”可能意味着已启动、已绑定、已插入等,具体取决于单元类型。该单元也可能处于更改状态的过程中,报告状态为“正在激活”或“正在停用”。当服务以某种方式失败(例如崩溃、以错误代码退出或超时)时,将进入一个特殊的“失败”状态。如果进入失败状态,则会记录原因以供以后参考。

show [PATTERN...|JOB...]

显示一个或多个单元、作业或管理器本身的属性。如果没有指定参数,则将显示管理器的属性。如果指定了单元名称,则将显示单元的属性,如果指定了作业 ID,则将显示作业的属性。默认情况下,将隐藏空属性。使用 --all 来显示这些属性。要选择要显示的特定属性,请使用 --property=。此命令旨在在需要可由计算机解析的输出时使用。如果您正在寻找格式化的人类可读输出,请使用 status


许多 systemctl 显示的属性直接映射到系统和服务管理器的配置设置及其单元文件。请注意,该命令显示的属性通常是原始配置设置的更低级别的、规范化的版本,并且除了配置之外,还会显示运行时状态。例如,服务单元显示的属性包括服务的当前主进程标识符,即“MainPID”(这是运行时状态),并且时间设置始终以“...USec”后缀的形式显示为属性,即使匹配的配置选项以“...Sec”结尾,因为微秒是系统和服务管理器内部使用的规范化时间单位。

有关这些属性的更多详细信息,请参阅支持这些属性的 D-Bus 接口的文档,即 org.freedesktop.systemd1(5)

cat PATTERN...

显示一个或多个单元的后端文件。打印单元的“片段”和“drop-ins”(源代码文件)。每个文件前面都有一个注释,其中包含文件名。请注意,这显示的是磁盘上后端文件的内容,如果自更新单元文件以来未发出 daemon-reload 命令,则这些内容可能与服务管理器对这些单元的理解不一致。

添加于版本 209。

help PATTERN...|PID...

如果可用,显示一个或多个单元的手册页。如果给出了 PID,则显示属于该进程的单元的手册页。

添加于版本 185。

list-dependencies [UNIT...]

显示指定单元所需的和期望的单元。这会递归地列出遵循 Requires=、Requisite=、Wants=、ConsistsOf=、BindsTo=Upholds= 依赖关系的单元。如果未指定任何单元,则默认为 default.target

如果指定了 --type=--state= 选项,则显示的单元会根据这些选项进行过滤。请注意,在这种情况下,我们无法使用树形结构,因此 --plain 将被隐式启用。

默认情况下,仅递归地扩展目标单元。如果传递了 --all,则所有其他单元也将递归地扩展。

可以使用 --reverse--after--before 选项来更改要显示的依赖项类型。

请注意,此命令仅列出当前由服务管理器加载到内存中的单元。特别是,此命令不适合获取对特定单元的所有反向依赖项的完整列表,因为它不会列出当前未加载的单元声明的依赖项。

添加于版本 198。

start PATTERN...

启动命令行中指定的一个或多个单元。

请注意,单元的 glob 模式扩展为当前内存中单元的名称。如果单元未处于活动状态且未处于失败状态,则通常不在内存中,并且不会与任何模式匹配。此外,对于实例化的单元,systemd 通常在实例启动之前不知道实例名称。因此,使用 glob 模式启动的实用性有限。此外,单元的辅助别名也不被考虑。


^ -all 选项也可用于对其他已加载单元引用的非活动单元进行操作。请注意,这与对“所有”可能的单元进行操作不同,因为如前所述,这样的列表是不明确的。但是,systemctl start --all GLOB 可能很有用,如果所有应匹配模式的单元都由某个已知已加载的目标拉取。

^ top PATTERN... 停止(停用)命令行中指定的一个或多个单元。

如果单元不存在或停止该单元被禁止(请参阅 systemd.unit(5) 中的 RefuseManualStop=),则此命令将失败。即使配置为停止单元的任何命令(ExecStop= 等)失败,也不会失败,因为管理器仍会强制终止该单元。

如果停止的单元仍然可以被其他单元触发,则会显示包含触发单元名称的警告。可以使用 --no-warn 来抑制警告。

^ eload PATTERN... 要求命令行中列出的所有单元重新加载其配置。请注意,这将重新加载特定于服务的配置,而不是 systemd 的单元配置文件。如果希望 systemd 重新加载单元的配置文件,请使用 daemon-reload 命令。换句话说:对于 Apache 的示例,这将重新加载 Web 服务器中的 Apache 的 httpd.conf,而不是 apache.service systemd 单元文件。

此命令不应与 daemon-reload 命令混淆。

^ estart PATTERN... 停止然后启动命令行中指定的一个或多个单元。如果单元尚未运行,它们将被启动。

请注意,使用此命令重新启动单元并不一定会清除单元的所有资源,然后再重新启动它。例如,每个服务的的文件描述符存储设施(请参阅 systemd.service(5) 中的 FileDescriptorStoreMax=)将保持不变,只要该单元具有待处理的作业,并且仅在单元完全停止且没有待处理的作业时才会被清除。如果打算在重新启动操作期间也清除文件描述符存储,则应发出明确的 systemctl stop 命令,然后是 systemctl start

^ ry-restart PATTERN... 如果单元正在运行,则停止然后启动命令行中指定的一个或多个单元。如果单元未运行,则不执行任何操作。

^ eload-or-restart PATTERN... 如果单元支持,则重新加载一个或多个单元。如果不支持,则停止然后启动它们。如果单元尚未运行,它们将被启动。

--marked 结合使用时,此命令具有略有不同的功能,请参见下文。

^ ry-reload-or-restart PATTERN... 如果单元支持,则重新加载一个或多个单元。如果不支持,则停止然后启动它们。如果单元未运行,则不执行任何操作。


新增于版本 229。

isolate UNIT

启动命令行中指定的单元及其依赖项,并停止所有其他单元,除非它们具有 IgnoreOnIsolate=yes(请参阅 systemd.unit(5))。如果给出了没有扩展名的单元名称,则假定扩展名为“.target”。

此命令很危险,因为它会立即停止未在新目标中启用的进程,可能包括您当前使用的图形环境或终端。

请注意,此操作仅允许对启用了 AllowIsolate= 的单元执行。有关详细信息,请参阅 systemd.unit(5)

kill PATTERN...

向单元的一个或多个进程发送 UNIX 进程信号。使用 --kill-whom= 来选择要发送信号的进程。使用 --signal= 来选择要发送的信号。与 --kill-value= 结合使用,以排队发送带有相关值的 POSIX 实时信号。

clean PATTERN...

删除指定单元的配置、状态、缓存、日志、运行时或文件描述符存储数据。使用 --what= 来选择要删除的资源类型。对于服务单元,这可用于删除使用 ConfigurationDirectory=StateDirectory=CacheDirectory=LogsDirectory=RuntimeDirectory= 配置的目录,请参阅 systemd.exec(5) 以获取详细信息。它还可以用于清除通过 FileDescriptorStoreMax= 启用的文件描述符存储,请参阅 systemd.service(5) 以获取详细信息。对于计时器单元,如果使用了 Persistent= 并且选择了 --what=state,则可用于清除持久时间戳数据,请参阅 systemd.timer(5) 以获取详细信息。此命令仅适用于使用上述任一设置的单元。如果未指定 --what=,则将删除缓存和运行时数据以及文件描述符存储(因为这三种类型的资源通常是冗余的,并且可以在单元的下一次调用时重新生成)。多个值可以用逗号分隔。 请注意,必须停止指定的单元才能执行此操作。

表 2. --what= 的可能值

┌─────────────────┬────────────────────────────────────┐
│ Value           │ Unit Setting                       │
├─────────────────┼────────────────────────────────────┤
│ "runtime"       │ RuntimeDirectory=                  │
├─────────────────┼────────────────────────────────────┤
│ "state"         │ StateDirectory=                    │
├─────────────────┼────────────────────────────────────┤
│ "cache"         │ CacheDirectory=                    │
├─────────────────┼────────────────────────────────────┤
│ "logs"          │ LogsDirectory=                     │
├─────────────────┼────────────────────────────────────┤
│ "configuration" │ ConfigurationDirectory=            │
├─────────────────┼────────────────────────────────────┤
│ "fdstore"       │ FileDescriptorStorePreserve=       │
├─────────────────┼────────────────────────────────────┤
│ "all"           │ All of the above                   │
├─────────────────┼────────────────────────────────────┤
│ "help"          │ 显示受支持的值并退出             │
└─────────────────┴────────────────────────────────────┘

新增于版本 243。

freeze PATTERN...

使用 cgroup freezer 冻结命令行中指定的一个或多个单元。

冻结单元会导致与该单元对应的 cgroup 中的所有进程被暂停。被暂停意味着该单元的进程在解冻之前不会被调度到 CPU 上运行。请注意,此命令仅在系统使用统一 cgroup 层次结构时才受支持。单元在执行该单元的作业(例如,在停止单元之前)之前会自动解冻。

新增于版本 246。

thaw PATTERN...

解冻(取消冻结)命令行中指定的一个或多个单元。

这是 freeze 命令的反向操作,并恢复单元的 cgroup 中进程的执行。

新增于版本 246。

set-property UNIT PROPERTY=VALUE...

在运行时设置指定的单元属性(如果支持)。这允许更改配置参数属性,例如资源控制设置。并非所有属性都可以在运行时更改,但许多资源控制设置(主要是在 systemd.resource-control(5) 中)都可以更改。更改会立即应用,并存储在磁盘上以供将来启动使用,除非传递了 --runtime,在这种情况下,设置仅在下一次重新启动之前有效。属性赋值的语法与单元文件中赋值的语法非常相似。

示例:`systemctl set-property foobar.service CPUWeight=200`

如果指定的单元似乎处于非活动状态,则更改只会按照上述方式存储在磁盘上,因此在启动单元时才会生效。

请注意,此命令允许同时更改多个属性,这比单独设置它们更好。


示例:systemctl set-property foobar.service CPUWeight=200 MemoryMax=2G IPAccounting=yes

与单元文件配置设置一样,分配一个空设置通常会将属性重置为其默认值。

示例:systemctl set-property avahi-daemon.service IPAddressDeny=

新增于版本 206。

bind UNIT PATH [PATH]

将主机上的文件或目录绑定挂载到指定的单元的挂载命名空间中。第一个路径参数是主机上的源文件或目录,第二个路径参数是单元挂载命名空间中的目标文件或目录。如果省略后者,则单元挂载命名空间中的目标路径与主机上的源路径相同。与 --read-only 选项结合使用时,将创建只读绑定挂载。与 --mkdir 选项结合使用时,将在应用挂载之前首先创建目标路径。

请注意,此选项当前仅支持在挂载命名空间中运行的单元(例如:使用 RootImage=, PrivateMounts=, 等)。此命令支持绑定挂载目录、常规文件、设备节点、AF_UNIX 套接字节点以及 FIFO。绑定挂载是临时的,并且在当前单元进程退出后立即撤销。请注意,此处提到的命名空间,即将在其中添加绑定挂载的命名空间,是主服务进程运行的命名空间。其他进程(由 ExecReload=, ExecStartPre= 等执行的进程)在不同的命名空间中运行。

如果内核支持,则对所选目标的任何先前挂载都将被新的挂载替换。如果不支持,则任何先前挂载都将被叠加挂载,但仍会保持固定状态且无法访问。

新增于版本 248。

mount-image UNIT IMAGE [PATH [PARTITION_NAME:MOUNT_OPTIONS]]

将主机上的映像挂载到指定的单元的挂载命名空间中。第一个路径参数是主机上的源映像,第二个路径参数是单元挂载命名空间中的目标目录(即在 RootImage=/RootDirectory= 中)。后面的参数(如果有)被解释为冒号分隔的元组,包含分区名称和该分区的逗号分隔的挂载选项列表。格式与 MountImages= 设置相同。与 --read-only 选项结合使用时,将创建只读挂载。与 --mkdir 选项结合使用时,将在应用挂载之前首先创建目标路径。

请注意,此选项当前仅支持在挂载命名空间中运行的单元(即使用 RootImage=, PrivateMounts=, 等)。请注意,此处提到的命名空间,即将在其中添加映像挂载的命名空间,是主服务进程运行的命名空间。请注意,此处提到的命名空间,即将在其中添加绑定挂载的命名空间,是主服务进程运行的命名空间。其他进程(由 ExecReload=, ExecStartPre= 等执行的进程)在不同的命名空间中运行。


如果内核支持,则会对选定的目标进行新的挂载,从而替换任何之前的挂载。如果不支持,则会对之前的挂载进行覆盖挂载,但会使其保持固定状态且无法访问。

示例:

systemctl mount-image foo.service /tmp/img.raw /var/lib/image root:ro,nosuid
systemctl mount-image --mkdir bar.service /tmp/img.raw /var/lib/baz/img

新增于版本 248。

service-log-level SERVICE [LEVEL]

如果未提供 LEVEL 参数,则打印服务 SERVICE 报告的当前日志级别。

如果提供了可选参数 LEVEL,则将服务的当前日志级别更改为 LEVEL。日志级别应该是典型的 syslog 日志级别,即范围为 0 到 7 的值,或者字符串 emerg、alert、crit、err、warning、notice、info、debug;有关详细信息,请参阅 syslog(3)。

该服务必须具有适当的 BusName=destination 属性,并且还必须实现通用的 org.freedesktop.LogControl1(5) 接口。(systemctl 将使用通用的 D-Bus 协议来访问 D-Bus 名称 destination 的 org.freedesktop.LogControl1.LogLevel 接口。)

新增于版本 247。

service-log-target SERVICE [TARGET]

如果未提供 TARGET 参数,则打印服务 SERVICE 报告的当前日志目标。

如果提供了可选参数 TARGET,则将服务的当前日志目标更改为 TARGET。日志目标应该是以下字符串之一:console(将日志输出到服务的标准错误流)、kmsg(将日志输出到内核日志缓冲区)、journal(使用本机日志协议将日志输出到 systemd-journald.service(8))、syslog(将日志输出到经典的 syslog 套接字 /dev/log)、null(不进行任何日志输出)或 auto(自动确定选择,通常等效于交互式调用服务时使用 console,否则使用 journal 或 syslog)。

对于大多数服务,只有一小部分日志目标才有意义。特别是,大多数“正常”服务应该只实现 console、journal 和 null。其他任何内容都只适用于在适当的日志建立之前处于非常早期的启动阶段的低级服务。

该服务必须具有适当的 BusName=destination 属性,并且还必须实现通用的 org.freedesktop.LogControl1(5) 接口。(systemctl 将使用通用的 D-Bus 协议来访问 D-Bus 名称 destination 的 org.freedesktop.LogControl1.LogLevel 接口。)

新增于版本 247。

reset-failed [PATTERN...]

重置指定单元的“失败”状态,或者如果没有传递单元名称,则重置所有单元的状态。当单元以某种方式失败(即,进程以非零错误代码退出、异常终止或超时)时,它将自动进入“失败”状态,并且其退出代码和状态将被记录,以便管理员进行检查,直到服务停止/重新启动或使用此命令进行重置。

除了重置单元的“失败”状态外,它还会重置各种其他单元特定的属性:所有单元类型的启动速率限制计数器都将重置为零,服务单元的重新启动计数器也将重置为零。因此,如果单元的启动限制(如通过 StartLimitIntervalSec=/StartLimitBurst= 配置)达到并且单元拒绝再次启动,请使用此命令使其可以再次启动。


whoami [PID...]

返回给定的 PID 引用进程所属的单元(每行一个)。如果未指定 PID,则返回 systemctl 命令调用的单元。

于版本 254 中添加。

单元文件命令

list-unit-files [PATTERN...]

列出系统上安装的单元文件,以及它们的启用状态(如 is-enabled 报告)。如果指定了一个或多个 PATTERN,则仅显示名称与其中一个模式匹配的单元文件(不支持匹配单元文件系统路径的模式)。

list-units 不同,此命令将列出模板单元以及显式实例化的单元。

于版本 233 中添加。

enable UNIT..., enable PATH...

启用一个或多个单元或单元实例。这将创建一个符号链接集,如指示的单元文件的 [Install] 部分中编码的那样。创建符号链接后,系统管理器配置将被重新加载(以与 daemon-reload 相同的方式),以确保立即应用更改。请注意,这不会同时启动任何正在启用的单元。如果需要,请结合 --now 选项使用,或者稍后使用适当的参数调用 start。请注意,对于单元实例的启用(即启用形式为 _ 的单元),将在单元配置目录中创建与实例同名的符号链接,但这些链接指向从中实例化它们的单个模板单元文件。

此命令期望有效的单元名称(在这种情况下,各种单元文件目录将自动搜索具有相应名称的单元文件),或者单元文件的绝对路径(在这种情况下,这些文件将直接读取)。如果指定的单元文件位于通常的单元文件目录之外,则会创建一个额外的符号链接,将其链接到单元配置路径,从而确保在 start 等命令请求时可以找到它。单元文件所在的目录必须在 systemd 启动时可访问(例如,位于 /home//var/ 下的内容是不允许的,除非这些目录位于根文件系统上)。

此命令将打印执行的文件系统操作。可以通过传递 --quiet 来抑制此输出。

请注意,此操作仅创建 [Install] 部分中建议的单元文件中的符号链接。虽然此命令是操作单元配置目录的推荐方法,但管理员可以手动进行其他更改,方法是在此目录下方放置或删除符号链接。这对于创建偏离建议的默认安装的配置特别有用。在这种情况下,管理员必须根据需要手动调用 daemon-reload,以确保应用更改。


当对没有安装信息的单元使用此操作时,会显示一条警告。 可以使用 --no-warn 来抑制此警告。

启用单元不应与启动(激活)单元混淆,启动单元是通过 start 命令完成的。启用和启动单元是正交的:单元可以被启用而不被启动,也可以被启动而不被启用。启用只是将单元挂接到各种建议的位置(例如,以便在启动时或插入特定类型的硬件时自动启动该单元)。启动实际上会生成守护进程(对于服务单元),或绑定套接字(对于套接字单元),依此类推。

根据是否指定了 --system、--user、--runtime 或 --global,这将为系统、仅为调用用户、仅为当前系统启动或所有未来用户的登录启用该单元。请注意,在后一种情况下,不会重新加载 systemd 守护进程配置。

对已屏蔽的单元使用 enable 命令是不支持的,并且会导致错误。

disable UNIT...

禁用一个或多个单元。这将从单元配置目录中删除指向指定单元的单元文件的所有符号链接,从而撤消 enable 或 link 命令所做的任何更改。请注意,这将删除指向匹配单元文件的所有符号链接,包括手动创建的符号链接,而不仅仅是 enable 或 link 命令实际创建的符号链接。请注意,虽然 disable 命令撤消了 enable 命令的效果,但这两种命令在其他方面并不对称,因为 disable 命令可能会删除比之前 enable 命令为同一单元创建的更多符号链接。

此命令仅接受有效的单元名称,不接受单元文件的路径。

除了作为参数指定的单元之外,[Install] 部分中包含的 Also= 设置中列出的所有单元也将被禁用。

此命令在完成操作后会隐式地重新加载系统管理器配置。请注意,此命令不会隐式停止正在禁用的单元。如果需要这样做,请将此命令与 --now 开关结合使用,或者稍后使用适当的参数调用 stop 命令。

此命令将打印有关执行的文件系统操作(符号链接删除)的信息。可以通过传递 --quiet 来抑制此输出。

如果单元被禁用但其触发单元仍然处于活动状态,则会显示一条包含触发单元名称的警告。可以使用 --no-warn 来抑制此警告。

当此命令与 --user 一起使用时,正在操作的单元可能仍然在全局范围内启用,因此即使在用户范围内成功禁用后,它们仍可能自动启动。在这种情况下,会显示一条关于此的警告,可以使用 --no-warn 来抑制该警告。


此命令以与 enable 类似的方式处理 --system--user--runtime--global--no-warn

添加于版本 238。

reenable UNIT...

重新启用一个或多个指定的单元。这是 disableenable 的组合,用于将单元文件的符号链接重置为其 [Install] 部分中配置的默认值。此命令仅接受单元名称,不接受单元文件的路径。

此命令在完成操作后会隐式地重新加载系统管理器配置。请注意,此命令不会隐式地重新启动正在禁用的单元。如果需要,可以将此命令与 --now 开关结合使用,或者稍后使用 try-restart 命令及其适当的参数。

添加于版本 238。

preset UNIT...

重置一个或多个指定的单元文件的启用/禁用状态,使其恢复为预设策略文件中配置的默认值。这与 disableenable 具有相同的效果,具体取决于单元在预设文件中是如何列出的。

使用 --preset-mode= 来控制单元是应该启用和禁用,还是仅启用,或者仅禁用。

如果单元不包含安装信息,则此命令会将其静默地忽略。UNIT 必须是实际的单元名称,任何别名都将被静默地忽略。

有关预设策略格式的更多信息,请参阅 systemd.preset(5)

添加于版本 238。

preset-all

将所有已安装的单元文件重置为预设策略文件中配置的默认值(如上所述)。

使用 --preset-mode= 来控制单元是应该启用和禁用,还是仅启用,或者仅禁用。

添加于版本 215。

is-enabled UNIT...

检查指定的任何单元文件是否已启用(与 enable 相同)。如果至少有一个单元已启用,则返回 0 的退出代码,否则返回非零退出代码。打印当前的启用状态(请参见下表)。要抑制此输出,请使用 --quiet。要显示安装目标,请使用 --full

表 3. is-enabled 输出

┌───────────────────┬────────────────────────────┬───────────┐
│ 名称              │ 描述                      │ 退出代码 │
├───────────────────┼────────────────────────────┼───────────┤
│ "enabled"         │ 通过 `.wants/`、`.requires/` 或 `Alias=` 启用 │           │
├───────────────────┤ 符号链接(永久位于 `/etc/systemd/system/` 中,或 │           │
│ "enabled-runtime" │ 临时位于 `/run/systemd/system/` 中)。         │ 0         │
│                   │                                              │           │
├───────────────────┼────────────────────────────┼───────────┤
│ "linked"          │ 通过一个或多个符号链接启用,这些符号链接指向单元文件 │           │
├───────────────────┤ (永久位于 `/etc/systemd/system/` 中,或临时位于 │           │
│ "linked-runtime"  │ `/run/systemd/system/` 中),即使单元文件位于单元 │ \> 0       │
│                   │ 文件搜索路径之外。                           │           │
├───────────────────┼────────────────────────────┼───────────┤
│ "alias"           │ 该名称是别名(指向另一个单元文件的符号链接)。         │ 0         │
│                   │                                              │           │
├───────────────────┼────────────────────────────┼───────────┤
│ "masked"          │ 完全禁用,因此对它的任何启动操作都将失败(永久位于 │           │
├───────────────────┤ `/etc/systemd/system/` 中,或临时位于          │           │
│ "masked-runtime"  │ `/run/systemd/system/` 中)。                     │ \> 0       │
│                   │                                              │           │
├───────────────────┼────────────────────────────┼───────────┤
│ "static"          │ 单元文件未启用,并且在其 `[Install]` 单元文件中 │ 0         │
│                   │ 没有用于启用的配置。                         │           │
├───────────────────┼────────────────────────────┼───────────┤
│ "indirect"        │ 单元文件本身未启用,但其 `[Install]` 单元文件中 │ 0         │
│                   │ 的 `Also=` 设置不为空,其中列出了可能已启用的 │           │
│                   │ 其他单元文件,或者它通过与 `Also=` 中指定的名称 │           │
│                   │ 不同的名称具有别名,即符号链接。对于模板单元文件, │           │
│                   │ 如果实例与 `DefaultInstance=` 中指定的实例不 │           │
│                   │ 同,则该实例已启用。                         │           │
├───────────────────┼────────────────────────────┼───────────┤
│ "disabled"        │ 单元文件未启用,但包含一个带有安装说明的 `[Install]` │ \> 0       │
│                   │ 部分。                                         │           │
├───────────────────┼────────────────────────────┼───────────┤
│ "generated"       │ 单元文件是通过生成器工具动态生成的。请参阅 `systemd.generator(7)`。 │ 0         │
│                   │ 生成的单元文件可能未启用,它们由其生成器隐式启用。     │           │
├───────────────────┼────────────────────────────┼───────────┤
│ "transient"       │ 单元文件已使用运行时 API 动态创建。临时单元可能未 │ 0         │
│                   │ 启用。                                         │           │
├───────────────────┼────────────────────────────┼───────────┤
│ "bad"             │ 单元文件无效或发生其他错误。请注意,`is-enabled` │ \> 0       │
│                   │ 不会实际返回此状态,而是打印错误消息。但是,由 │           │
│                   │ `list-unit-files` 打印的单元文件列表可能会显示 │           │
│                   │ 单元。                                         │           │
├───────────────────┼────────────────────────────┼───────────┤
│ "not-found"       │ 单元文件不存在。                                 │ 4         │
└───────────────────┴────────────────────────────┴───────────┘

在版本 238 中添加。

mask UNIT...

屏蔽一个或多个单元,如命令行中指定。这将把这些单元文件链接到 /dev/null,从而使其无法启动。这是 disable 命令的更强版本,因为它禁止所有类型的单元激活,包括启用和手动激活。请谨慎使用此选项。可以使用 --runtime 选项,以便仅在系统下一次重新启动时临时屏蔽。可以使用 --now 选项,以确保这些单元也被停止。此命令仅期望有效的单元名称,不接受单元文件路径。

请注意,这将会在 /etc/systemd/system/(如果未指定 --runtime)或 /run/systemd/system/(如果指定了 --runtime)下创建一个符号链接,链接到单元名称。如果这些目录中已经存在匹配的单元文件,则此操作将会失败。这意味着此操作主要用于屏蔽由供应商提供的单元(因为这些单元位于 /usr/lib/systemd/system/ 中,而不是上述两个目录中),但通常不适用于本地创建的单元(因为这些单元通常放置在上述两个目录中)。类似限制也适用于 --user 模式,在这种情况下,目录位于用户的家目录中。

如果某个单元被屏蔽,但其触发单元仍然处于活动状态,则会显示包含触发单元名称的警告。可以使用 --no-warn 来抑制警告。

在版本 238 中添加。

unmask UNIT...

取消屏蔽一个或多个单元文件,如命令行中指定。这将撤消 mask 命令的效果。此命令仅期望有效的单元名称,不接受单元文件路径。

在版本 238 中添加。

link PATH...

将一个不在单元文件搜索路径中的单元文件链接到单元文件搜索路径中。此命令期望单元文件的绝对路径。可以使用 disable 命令撤消此命令的效果。此命令的作用是,即使单元文件未直接安装在单元搜索路径中,也可以通过 start 等命令使用它。单元文件所在的文件系统在 systemd 启动时必须可访问(例如,不允许位于 /home/ 或 /var/ 下的任何内容,除非这些目录位于根文件系统上)。


版本 233 中添加。

revert UNIT...

将一个或多个单元文件恢复到供应商版本。此命令会删除修改指定单元的附加配置文件,以及任何用户配置的单元文件,这些文件会覆盖匹配的供应商提供的单元文件。具体来说,对于一个单元“foo.service”,匹配的目录“foo.service.d/”及其包含的所有文件都会从持久和运行时配置目录(即 /etc/systemd/system 和 /run/systemd/system 下)中删除;如果该单元文件具有供应商提供的版本(即位于 /usr/ 下的单元文件),则会删除任何匹配的持久或运行时单元文件,这些文件会覆盖它。请注意,如果一个单元文件没有供应商提供的版本(即仅定义在 /etc/systemd/system 或 /run/systemd/system 下,而不是在单元文件存储在 /usr/ 下),那么它不会被删除。此外,如果一个单元被屏蔽,则会取消屏蔽。

实际上,可以使用此命令来撤消使用 systemctl edit、systemctl set-property 和 systemctl mask 所做的所有更改,并将原始单元文件及其设置恢复到生效状态。

版本 230 中添加。

add-wants TARGET UNIT..., add-requires TARGET UNIT...

分别为指定的 TARGET 添加“Wants=”或“Requires=”依赖项,应用于一个或多个单元。

此命令会以类似于 enable 的方式处理 --system、--user、--runtime 和 --global。

版本 217 中添加。

edit UNIT...

编辑或替换一个附加片段或主单元文件,以扩展或覆盖指定单元的定义。

根据是否指定 --system(默认)、--user 或 --global,此命令将对系统单元文件、调用用户的单元文件或所有用户共享的单元文件进行操作。

编辑器(请参见下面的“环境”部分)将在临时文件中启动,如果编辑器成功退出,则会将这些临时文件写入实际位置。编辑完成后,将重新加载配置,相当于 systemctl daemon-reload --system 或 systemctl daemon-reload --user。对于 edit --global,不会执行重新加载,并且编辑仅在后续登录时(或在其他方式请求重新加载后)生效。

如果指定了 --full,则将创建或编辑主单元文件的替换版本。 否则,将创建或编辑一个附加文件。

如果指定了 --drop-in=,则将使用给定的附加文件名而不是默认的 override.conf。

单元必须存在,即其主单元文件必须存在。如果指定了 --force,则会忽略此要求,并且可以创建新的单元(使用 --full),或者可以为不存在的单元创建附加文件。


如果指定了 --runtime,则更改将临时应用于 /run/,并在下次重启时丢失。

如果指定了 --stdin,则新的内容将从标准输入读取。在这种模式下,旧文件内容将被丢弃。

如果临时文件在退出时为空,则取消对相关单元的修改。

请注意,此命令不能用于远程编辑单元,并且您不能临时编辑 /etc/ 中的单元,因为它们优先于 /run/

该功能于版本 218 中添加。

get-default

返回默认启动目标。这将返回目标单元名称,default.target 是一个别名(符号链接)。

该功能于版本 205 中添加。

set-default TARGET

设置默认启动目标。这将设置(创建符号链接)default.target 别名指向给定的目标单元。

该功能于版本 205 中添加。

机器命令

list-machines [PATTERN...]

列出主机和所有正在运行的本地容器及其状态。如果指定了一个或多个 PATTERN,则仅显示匹配其中一个模式的容器。

该功能于版本 212 中添加。

作业命令

list-jobs [PATTERN...]

列出正在进行的作业。如果指定了一个或多个 PATTERN,则仅显示与其中一个模式匹配的单元的作业。

--after--before 结合使用时,列表将包含有关每个作业正在等待哪个其他作业的信息,以及哪个其他作业正在等待它,请参见上文。

该功能于版本 233 中添加。

cancel [JOB...]

通过它们的数字作业 ID 取消命令行中指定的 1 个或多个作业。如果没有指定作业 ID,则取消所有待处理的作业。

该功能于版本 233 中添加。

环境命令

systemd 支持一个环境块,该块传递给管理器启动的进程。变量名称可以包含 ASCII 字母、数字和下划线。变量名称不能为空或以数字开头。在变量值中,允许使用大多数字符,但整个序列必须是有效的 UTF-8。(请注意,换行符 (NL)、制表符 (TAB) 或转义字符 (ESC) 等控制字符是有效的 ASCII,因此也是有效的 UTF-8)。环境块的总长度受 sysconf(3) 中定义的 _SC_ARG_MAX 值的限制。

show-environment

转储 systemd 管理器环境块。这是传递给管理器启动的所有进程的环境块。环境块将以易于理解的形式转储,以便可以将其导入到大多数 shell 中。如果变量值中不存在特殊字符或空格,则不执行转义,并且赋值的形式为“VARIABLE=value”。如果存在空格或对 shell 具有特殊含义的字符,则使用美元-单引号转义,并且赋值的形式为“VARIABLE=$'value'”。这种语法已知受 bash(1)、zsh(1)、ksh(1) 和 busybox(1) 的 ash(1) 的支持,但 dash(1) 和 fish(1) 不支持。


请注意,这显示的是有效的环境变量块,即通过配置文件、环境变量生成器和 IPC(即通过以下 set-environment 命令)配置的环境变量的组合。当一个单元进程被分叉时,这个组合后的环境变量块将进一步与每个单元的特定环境变量组合,而这些环境变量在此命令中不可见。

`set-environment VARIABLE=VALUE...`

设置一个或多个服务管理器环境变量,如命令行中所指定。如果变量名和值不符合上述规则,则此命令将失败。

请注意,此命令操作的是与从服务管理器配置和环境变量生成器配置的环境变量块分开的环境变量块。每当调用一个进程时,这两个块都会被组合(同时还包括任何特定于服务的环境变量),然后传递给该进程。show-environment 命令将显示块的组合,请参见上述内容。

自版本 233 起添加。

`unset-environment VARIABLE...`

取消设置一个或多个 systemd 管理器环境变量。如果仅指定了变量名,则无论其值如何,该变量都将被删除。如果指定了变量及其值,则只有当变量具有指定的值时,该变量才会被删除。

请注意,此命令操作的是与从服务管理器配置和环境变量生成器配置的环境变量块分开的环境变量块。每当调用一个进程时,这两个块都会被组合(同时还包括任何特定于服务的环境变量),然后传递给该进程。show-environment 命令将显示块的组合,请参见上述内容。请注意,这意味着此命令不能用于取消设置在服务管理器配置文件或通过生成器中定义的环境变量。

自版本 233 起添加。

`import-environment VARIABLE...`

将客户端设置的所有环境变量或一个或多个环境变量导入到 systemd 管理器环境变量块中。如果传递了一个环境变量名称列表,则客户端环境变量的值将被导入到管理器的环境变量块中。如果任何名称不是有效的环境变量名称,或者具有与上述规则中描述的无效值,则会引发错误。如果没有传递任何参数,则整个从 systemctl 进程继承的环境变量块将被导入。在这种模式下,任何继承的无效环境变量都会被静默忽略。

导入完整的继承环境变量块(不带任何参数调用此命令)已被弃用。Shell 会设置数十个变量,这些变量仅在本地有意义,并且仅供 Shell 的子进程使用。在全局环境变量块中,这些变量会使其他进程感到困惑。

自版本 209 起添加。

管理器状态命令

`daemon-reload`

重新加载 systemd 管理器配置。这将重新运行所有生成器(请参阅 systemd.generator(7)),重新加载所有单元文件,并重建整个依赖树。在重新加载守护程序时,systemd 代表用户配置所侦听的所有套接字都将保持可访问状态。


请勿将此命令与 reload 命令混淆。

daemon-reexec

重新执行 systemd 管理器。这将序列化管理器状态,重新执行该进程,然后再次反序列化该状态。此命令几乎没有用处,除非用于调试和软件包升级。有时,它可能对作为重量级的 daemon-reload 有所帮助。在重新执行守护程序期间,systemd 代表用户配置监听的所有套接字都将保持可访问状态。

log-level [LEVEL]

如果未提供参数,则打印管理器当前的日志级别。如果提供可选参数 LEVEL,则将管理器当前的日志级别更改为 LEVEL(接受与 systemd(1) 中描述的 --log-level= 相同的数值)。

自版本 244 起添加。

log-target [TARGET]

如果未提供参数,则打印管理器当前的日志目标。如果提供可选参数 TARGET,则将管理器当前的日志目标更改为 TARGET(接受与 systemd(1) 中描述的 --log-target= 相同的数值)。

自版本 244 起添加。

service-watchdogs [yes|no]

如果未提供参数,则打印管理器中服务运行时看门狗的当前状态。如果提供一个可选的布尔参数,则全局启用或禁用服务运行时看门狗(WatchdogSec=)和紧急操作(例如 OnFailure= 或 StartLimitAction=);请参阅 systemd.service(5)。硬件看门狗不受此设置的影响。

自版本 244 起添加。

系统命令

is-system-running

检查系统是否正在运行。如果系统完全启动并正在运行,即未处于启动、关闭或维护模式,并且没有失败的服务,则返回成功(退出代码 0)。否则返回失败(退出代码为非零)。此外,当前状态将以简短的字符串形式打印到标准输出,请参阅下表。使用 --quiet 选项以禁止此输出。

使用 --wait 选项,在打印当前状态并返回适当的错误状态之前,等待启动过程完成。如果使用 --wait 选项,则不会报告 initializing 或 starting 状态,而是该命令将阻塞,直到达到后续状态(例如 running 或 degraded)为止。

表 4. is-system-running 输出

┌──────────────┬────────────────────────────┬───────────┐
│ Name         │ Description                │ Exit Code │
├──────────────┼────────────────────────────┼───────────┤
│ initializing │ 早期启动,在达到       │ \> 0       │
│              │ basic.target 或进入维护状态之前。 │           │
├──────────────┼────────────────────────────┼───────────┤
│ starting     │ 后期启动,在作业队列第一次变为空闲状态之前,或者其中一个救援目标被达到之前。│ \> 0       │
├──────────────┼────────────────────────────┼───────────┤
│ running      │ 系统完全运行。              │ 0         │
├──────────────┼────────────────────────────┼───────────┤
│ degraded     │ 系统正在运行,但一个或多个单元失败。 │ \> 0       │
├──────────────┼────────────────────────────┼───────────┤
│ maintenance  │ 救援或紧急目标处于活动状态。   │ \> 0       │
├──────────────┼────────────────────────────┼───────────┤
│ stopping     │ 管理器正在关闭。             │ \> 0       │
├──────────────┼────────────────────────────┼───────────┤
│ offline      │ 管理器未运行。具体来说,如果正在运行与系统管理器(PID 1)不兼容的程序,则这是运行状态。│ \> 0       │
├──────────────┼────────────────────────────┼───────────┤
│ unknown      │ 无法确定运行状态,因为缺少资源或其他错误原因。│ \> 0       │
└──────────────┴────────────────────────────┴───────────┘

添加于版本 215。

default

进入默认模式。这等同于 systemctl isolate default.target。此操作默认情况下为阻塞操作,使用 --no-block 来请求异步行为。

rescue

进入救援模式。这等同于 systemctl isolate rescue.target。此操作默认情况下为阻塞操作,使用 --no-block 来请求异步行为。

emergency

进入紧急模式。这等同于 systemctl isolate emergency.target。此操作默认情况下为阻塞操作,使用 --no-block 来请求异步行为。

halt

关闭并停止系统。这大致等同于 systemctl start halt.target --job-mode=replace-irreversibly --no-block,但也会向所有用户发送一条墙消息。此命令是异步的;它将在停止操作被排队后返回,而无需等待其完成。请注意,此操作只会关闭操作系统内核并在关闭后让硬件保持通电状态。使用 systemctl poweroff 来关闭系统(参见下文)。

如果与 --force 结合使用,则跳过所有正在运行的服务的关闭,但是所有进程都会被终止,并且所有文件系统都会被卸载或以只读方式挂载,紧接着系统将停止。如果指定 --force 两次,则操作会立即执行,而不会终止任何进程或卸载任何文件系统。这可能会导致数据丢失。请注意,当指定 --force 两次时,停止操作将由 systemctl 本身执行,并且不会联系系统管理器。这意味着即使系统管理器崩溃,该命令也应该成功。

如果与 --when= 结合使用,则将在给定的时间戳之后安排关闭。并且 --when=cancel 将取消关闭。

poweroff

关闭并断电系统。这大致等同于 systemctl start poweroff.target --job-mode=replace-irreversibly --no-block,但也会向所有用户发送一条墙消息。此命令是异步的;它将在断电操作被排队后返回,而无需等待其完成。

此命令以与 halt 类似的方式处理 --force--when=

reboot

关闭并重启系统。

此命令大致等同于 systemctl start reboot.target --job-mode=replace-irreversibly --no-block,但也会向所有用户发送一条墙消息。此命令是异步的;它将在重启操作被排队后返回,而无需等待其完成。

如果给出了 --reboot-argument= 开关,它将作为可选参数传递给 [reboot]({filename}../../reboot)(2) 系统调用。

可以使用 --boot-loader-entry=--boot-loader-menu=--firmware-setup 选项来选择重启后要执行的操作。请参阅这些选项的描述以获取详细信息。

此命令以与 halt 类似的方式处理 --force--when=


如果通过 kexec --load 加载了一个新的内核,则会执行 kexec 而不是重新启动,除非设置了 SYSTEMCTL_SKIP_AUTO_KEXEC=1。如果已经在 /run/nextroot/ 上设置了一个新的根文件系统,则会执行软重新启动而不是重新启动,除非设置了 SYSTEMCTL_SKIP_AUTO_SOFT_REBOOT=1

添加于版本 246。

kexec

通过 kexec 关机并重新启动系统。该命令将加载一个 kexec 内核(如果尚未加载),或者失败。可以通过单独的步骤提前加载内核,这对于需要自定义 initrd 或额外的内核命令行选项时非常有用。可以使用 --force 继续操作,而无需 kexec 内核,即执行正常的重新启动。最终的重新启动步骤等效于 systemctl start kexec.target --job-mode=replace-irreversibly --no-block

要加载内核,将执行以下操作:按照 UAPI.1 Boot Loader Specification[1] 进行枚举,并加载默认的引导条目。要使此步骤成功,系统必须使用 UEFI,并且引导加载程序条目必须配置正确。可以使用 bootctl list 列出引导条目,请参阅 bootctl(1)

此命令是异步的;它会在重新启动操作被排队后返回,而不会等待它完成。

此命令遵守 --force--when=,类似于 halt

如果通过 kexec --load 加载了一个新的内核,当调用 reboot 时,将执行 kexec,除非设置了 SYSTEMCTL_SKIP_AUTO_KEXEC=1

soft-reboot

关机并重新启动用户空间。这等效于 systemctl start soft-reboot.target --job-mode=replace-irreversibly --no-block。此命令是异步的;它会在重新启动操作被排队后返回,而不会等待它完成。

此命令以类似于 halt 的方式遵守 --force--when=

此操作仅重新启动用户空间,内核保持运行状态。请参阅 systemd-softreboot.service(8) 以获取更多详细信息。

如果已经在 /run/nextroot/ 上设置了一个新的根文件系统,当调用 reboot 时,将执行软重新启动,除非设置了 SYSTEMCTL_SKIP_AUTO_SOFT_REBOOT=1

添加于版本 254。

exit [EXIT_CODE]

要求服务管理器退出。这仅在用户服务管理器(即与 --user 选项一起使用)或在容器中时才受支持,否则等效于 poweroff。此命令是异步的;它会在退出操作被排队后返回,而不会等待它完成。

如果传递了 EXIT_CODE,服务管理器将以指定的退出代码退出。

添加于版本 227。

switch-root [ROOT [INIT]]

切换到不同的根目录,并在其中执行新的系统管理器进程。这用于在 initrd 中,将从 initrd 的系统管理器进程(也称为“init”进程,PID 1)过渡到从实际主机根文件系统加载的主系统管理器进程。此调用有两个参数:要成为新根目录的目录,以及要在其中执行的新系统管理器二进制文件的路径,作为 PID 1。如果两者都省略或前者为空字符串,则默认为 /sysroot/。如果省略了后者或为空字符串,则会自动搜索并使用 systemd 二进制文件作为服务管理器。如果省略了系统管理器路径、等于空字符串或与 systemd 二进制文件的路径相同,则 initrd 的系统管理器进程的状态将传递给主系统管理器,这允许以后检查 initrd 引导阶段中涉及的服务的状态。


在版本 209 中添加。

sleep

通过挂起、休眠、混合挂起或挂起后休眠,使系统进入休眠状态。 休眠操作由 systemd-logind.service(8) 自动选择。默认情况下,使用挂起后休眠,如果不支持,则回退到挂起,然后再回退到休眠。有关更多详细信息,请参阅 logind.conf(5) 中的 SleepOperation= 设置。此命令是异步的,并在休眠操作成功排队后返回。它不会等待休眠/恢复周期完成。

在版本 256 中添加。

suspend

挂起系统。这将触发特殊目标单元 suspend.target 的激活。 此命令是异步的,并在挂起操作成功排队后返回。它不会等待挂起/恢复周期完成。

如果指定了 --force,并且 systemd-logind 为该操作返回错误,则该错误将被忽略,并且该操作将直接通过启动目标单元再次尝试。

hibernate

休眠系统。这将触发特殊目标单元 hibernate.target 的激活。 此命令是异步的,并在休眠操作成功排队后返回。它不会等待休眠/恢复周期完成。

此命令以与 suspend 相同的方式处理 --force。

hybrid-sleep

休眠并挂起系统。这将触发特殊目标单元 hybrid-sleep.target 的激活。 此命令是异步的,并在混合休眠操作成功排队后返回。它不会等待休眠/唤醒周期完成。

此命令以与 suspend 相同的方式处理 --force。

在版本 196 中添加。

suspend-then-hibernate

挂起系统,并在电池电量低或 systemd-sleep.conf 中指定的延迟时间过后,对其进行休眠。这将触发特殊目标单元 suspend-then-hibernate.target 的激活。此命令是异步的,并在混合休眠操作成功排队后返回。它不会等待休眠/唤醒或休眠/恢复周期完成。

此命令以与 suspend 相同的方式处理 --force。

在版本 240 中添加。

参数语法

上面列出的单元命令接受单个单元名称(指定为 UNIT),或多个单元规范(指定为 PATTERN...)。在第一种情况下,必须提供带有或不带有后缀的单元名称。如果未指定后缀(单元名称“缩写”),systemctl 将追加合适的后缀,默认情况下为“.service”,并且对于仅对特定单元类型执行操作的命令,追加类型特定的后缀。例如:


# systemctl start sshd

和

# systemctl start sshd.service

是等效的,同样,

# systemctl isolate default

和

# systemctl isolate default.target

也是等效的。请注意,(绝对)路径到设备节点会自动转换为设备单元名称,而其他(绝对)路径会转换为挂载单元名称。

# systemctl status /dev/sda
# systemctl status /home

等同于:

# systemctl status dev-sda.device
# systemctl status home.mount

在第二种情况下,shell样式的通配符将与当前内存中所有单元的主要名称进行匹配;文字单元名称,带或不带后缀,将被视为第一种情况。这意味着文字单元名称始终引用确切的一个单元,但通配符可能匹配零个单元,这不被视为错误。

通配模式使用 fnmatch(3),因此使用标准的 shell 样式通配规则,可以使用 "*"、"?"、"[]"。有关更多详细信息,请参阅 glob(7)。模式将与当前内存中的单元的主要名称进行匹配,并且不匹配任何内容的模式将被静默跳过。例如:

# systemctl stop "sshd@*.service"

将停止所有 [email protected] 实例。请注意,单元的别名以及不在内存中的单元不用于通配符扩展。

对于单元文件命令,指定的 UNIT 应该是单元文件的名称(可能为缩写形式,请参见上方),或者单元文件的绝对路径:

# systemctl enable foo.service

或者

# systemctl link /path/to/foo.service

选项

以下选项可用:

-t, --type=
参数是一个逗号分隔的单元类型列表,例如 service 和 socket。当使用 list-units、list-dependencies、show 或 status 命令列出单元时,只会显示指定类型的单元。默认情况下,会显示所有类型的单元。

作为一种特殊情况,如果其中一个参数是 help,将打印允许的值列表,程序将退出。

--state=
参数是一个逗号分隔的单元 LOAD、SUB 或 ACTIVE 状态列表。当使用 list-units、list-dependencies、show 或 status 命令列出单元时,只会显示处于指定状态的单元。使用 --state=failed 或 --failed 来仅显示失败的单元。

作为一种特殊情况,如果其中一个参数是 help,将打印允许的值列表,程序将退出。

自版本 206 起添加。

-p, --property=
当使用 show 命令显示单元/作业/管理器属性时,将显示限制为参数中指定的属性。该参数应该是逗号分隔的属性名称列表,例如 "MainPID"。除非指定,否则将显示所有已知属性。如果指定了多次,则将显示具有指定名称的所有属性。已为属性名称实现了 shell 补全。

对于管理器本身,systemctl show 将显示所有可用属性,其中大多数属性都是派生的或与 systemd-system.conf(5) 中描述的选项密切相关。

单元的属性因单元类型而异,因此显示任何单元(即使是不存在的单元)也是列出与该类型相关的属性的一种方法。 同样,显示任何作业将列出所有作业的属性。 单元的属性在 systemd.unit(5) 中有文档,并且单个单元类型的页面 systemd.service(5)systemd.socket(5) 等也进行了描述。

-P

等效于 --value --property=, 即显示属性的值,不包括属性名称或“=”。 请注意,使用 -P 一次也会影响所有使用 -p/--property= 列出的属性。

在版本 246 中添加。

-a, --all

使用 list-units 列出单元时,也显示非活动单元和正在跟踪其他单元的单元。 当显示单元/作业/管理器的属性时,显示所有属性,无论是否已设置。

要列出文件系统中安装的所有单元,请使用 list-unit-files 命令。

当使用 list-dependencies 列出单元时,递归显示所有依赖单元的依赖关系(默认情况下,仅显示目标单元的依赖关系)。

当与 status 一起使用时,以完整形式显示日志消息,即使它们包含不可打印的字符或非常长。 默认情况下,包含不可打印字符的字段将被缩写为“blob data”。(请注意,分页器可能会再次转义不可打印的字符。)

-r, --recursive

当列出单元时,也显示本地容器的单元。 本地容器的单元将以容器名称为前缀,并用单个冒号字符 (":") 分隔。

在版本 212 中添加。

--reverse

使用 list-dependencies 显示单元之间的反向依赖关系,即跟踪 WantedBy=, RequiredBy=, UpheldBy=, PartOf=, BoundBy= 类型的依赖关系,而不是 Wants= 和类似的依赖关系。

在版本 203 中添加。

--after

使用 list-dependencies 时,显示在指定单元之前排序的单元。 换句话说,递归列出遵循 After= 依赖关系的单元。

请注意,任何 After= 依赖关系都会自动被镜像以创建 Before= 依赖关系。 可以显式指定临时依赖关系,但也会为 WantedBy= 目标(请参阅 systemd.target(5))以及其他指令(例如 RequiresMountsFor=)引入隐式依赖关系。 显式和隐式引入的依赖关系都将使用 list-dependencies 显示。

当传递给 list-jobs 命令时,对于每个打印的作业,显示哪些其他作业正在等待它。 可以与 --before 结合使用,以显示每个作业正在等待的所有作业以及每个作业正在等待的作业。

在版本 203 中添加。

--before

使用 list-dependencies 时,显示在指定单元之后排序的单元。 换句话说,递归列出遵循 Before= 依赖关系的单元。


当传递给 list-jobs 命令时,对于每个打印出的任务,显示它正在等待的其他任务。可以与 --after 选项结合使用,以显示每个任务正在等待的任务以及每个任务正在等待的其他任务。

该选项于版本 212 中添加。

--with-dependencies

当与 statuscatlist-unitslist-unit-files 命令一起使用时,这些命令会打印所有指定的单元及其依赖项。

可以使用 --reverse--after--before 选项来更改显示的依赖项类型。

该选项于版本 245 中添加。

-l, --full

statuslist-unitslist-jobslist-timers 命令的输出中,不要截断单元名称、进程树条目、日志输出或单元描述。

此外,在 is-enabled 命令的输出中,显示安装目标。

--value

在使用 show 命令打印属性时,仅打印值,并跳过属性名称和“=”。另请参阅上面的 -P 选项。

该选项于版本 230 中添加。

--show-types

在显示套接字时,显示套接字的类型。

该选项于版本 202 中添加。

--job-mode=

在排队新的任务时,此选项控制如何处理已排队的任务。它采用以下值之一:“fail”、“lenient”、“replace”、“replace-irreversibly”、“isolate”、“ignore-dependencies”、“ignore-requirements”、“flush”、“triggering”或“restart-dependencies”。默认值为“replace”,除非使用 isolate 命令,此时默认采用“isolate”任务模式。

如果指定了“fail”,并且对弱依赖项的请求操作与待处理的任务冲突(更具体地说:导致已待处理的启动任务反转为停止任务,或反之),则导致操作失败。

如果指定了“lenient”,并且请求的操作与任何活动/正在激活的单元冲突,则导致操作失败。

如果指定了“replace”(默认值),则任何冲突的待处理任务都将被替换,如有必要。

如果指定了“replace-irreversibly”,则以与“replace”相同的方式运行,但还将新任务标记为不可逆。这可以防止将来的冲突事务替换这些任务(甚至在不可逆任务仍在处理中时无法排队)。可以使用 cancel 命令取消不可逆任务。应将此任务模式用于任何引入 shutdown.target 的事务。

“isolate”仅适用于启动操作,并在指定单元启动时停止所有其他单元。当使用 `isolate` 命令时,始终使用此模式。

“flush”将导致在排队新任务时取消所有已排队的任务。

如果指定了“ignore-dependencies”,则此新任务将忽略所有单元依赖项,并立即执行操作。如果传递了此选项,则不会引入传递单元的任何必需单元,并且不会遵守任何排序依赖项。这主要是管理员的调试和救援工具,不应由应用程序使用。

“ignore-requirements”类似于“ignore-dependencies”,但仅会忽略要求依赖项,排序依赖项仍然会得到遵守。

“triggering” 只能与 systemctl stop 一起使用。在这种模式下,将停止指定的单元以及任何触发它的活动单元。有关触发单元的更多信息,请参阅 systemd.unit(5) 中 Triggers= 的讨论。

“restart-dependencies” 只能与 systemctl start 一起使用。在这种模式下,指定单元的依赖项将接收重启传播,就像为该单元排队了一个重启作业一样。

版本 209 中添加。

-T, --show-transaction
当排队单元作业时(例如,作为 systemctl start 命令或其他类似操作的结果),显示有关所有排队作业的简要信息,包括请求的作业以及由于单元依赖关系而添加的任何作业。请注意,输出仅包括立即属于请求事务的作业。 可能会发生以下情况:作为排队作业的结果而运行的服务启动程序代码可能会请求将更多作业添加到队列中。这意味着所列作业的完成最终可能会导致比所列作业更多的作业。

版本 242 中添加。

--fail
相当于 --job-mode=fail。

与 kill 命令一起使用时,如果没有杀死任何单元,则操作将导致错误。

版本 227 中添加。

--check-inhibitors=
当请求系统关闭或进入睡眠状态时,此选项控制检查抑制器锁。它接受“auto”、“yes”和“no”中的一个值。默认值为“auto”,这意味着 logind 将执行检查并尊重活动的抑制器锁,但 systemctl 仅会对交互式调用(即,来自 TTY 的调用)执行客户端检查,以便向用户返回更友好、更具信息性的错误。 “no” 禁用了 systemctl 和 systemd-logind(8) 中的检查。

应用程序可以建立抑制器锁以防止某些重要操作(例如 CD 刻录)被系统关闭或睡眠状态中断。任何用户都可以获取这些锁,并且特权用户可以覆盖这些锁。如果已获取任何锁,则系统关闭和睡眠状态请求通常会失败(除非明确使用“no”覆盖)。

选项 --force 提供了覆盖抑制器的另一种方法。

版本 248 中添加。

-i
相当于 --check-inhibitors=no。

版本 198 中添加。

--dry-run
仅打印将执行的操作。当前由以下动词支持:halt、poweroff、reboot、kexec、suspend、hibernate、hybrid-sleep、suspend-then-hibernate、default、rescue、emergency 和 exit。

版本 236 中添加。

-q, --quiet
禁止打印各种命令的结果以及关于截断的日志行的提示。这不会禁止打印其打印输出是唯一结果的命令(如 show)。错误始终会打印。

-v, --verbose
在执行单元操作时,显示单元日志输出。

版本 258 中添加。

--no-warn
不要生成默认情况下在以下情况下显示的消息:

当在 `/proc/` 未挂载时调用 `systemctl` 时,

当对没有安装信息(即没有或有一个空的 `[Install]` 部分)的单元使用 `enable` 或 `disable` 时,

当将 `disable` 与 `--user` 结合用于在全局范围内启用的单元时,

当一个已停止、禁用或屏蔽的单元仍然有活动的触发单元时,

当单元文件发生更改并需要 `daemon-reload` 时。

新增于版本 253。

`--no-block`
不要同步等待请求的操作完成。如果未指定此选项,`systemctl` 将验证并排队作业,然后等待直到单元的启动完成。通过传递此参数,它只会验证并排队。此选项不能与 `--wait` 结合使用。

`--wait`
与 `start` 或 `restart` 一起使用时,同步等待启动的单元再次终止。此选项不能与 `--no-block` 结合使用。请注意,如果任何给定的单元永远不会终止(无论是由自身终止还是通过显式停止),这将无限期地等待;特别是那些使用 `RemainAfterExit=yes` 的服务。

与 `is-system-running` 一起使用时,在返回之前等待启动过程完成。

与 `kill` 一起使用时,等待被发送信号的单元终止。请注意,如果任何给定的单元永远不会终止,这将无限期地等待。

新增于版本 232。

`--user`
与调用用户的服务管理器通信,而不是系统服务管理器。

`--system`
与系统服务管理器通信。这是默认选项。

`--failed`
列出处于失败状态的单元。这等效于 `--state=failed`。

新增于版本 233。

`--no-wall`
在 `halt`、`power-off` 和 `reboot` 之前,不要发送 wall 消息。

`--global`
与 `enable` 和 `disable` 一起使用时,在全局用户配置目录中运行,从而为所有用户的未来登录全局启用或禁用单元文件。

`--no-reload`
与 `enable`、`disable`、`preset`、`mask` 或 `unmask` 一起使用时,不要在执行更改后隐式重新加载守护程序配置。

`--kill-whom=`
与 `kill` 一起使用时,选择要向哪些 UNIX 进程发送信号。必须是 `main`、`control`、`cgroup` 或 `all`,以选择是仅杀死主进程、控制进程、单元控制组中的所有进程还是单元的所有进程。单元的主进程是定义其生命周期的进程。单元的控制进程是管理器调用的用于引起其状态变化的一个进程。例如,所有由于服务单元的 `ExecStartPre=`、`ExecStop=` 或 `ExecReload=` 设置而启动的进程都是控制进程。请注意,一次只有一个控制进程,因为一次只会执行一个状态变化。对于 `Type=forking` 类型的服务,管理器为 `ExecStart=` 启动的初始进程是控制进程,而随后由该进程分叉的进程是单元的主进程(如果可以确定)。对于其他类型的服务单元,管理器为 `ExecStart=` 分叉的进程始终是主进程。一个服务单元由零个或一个主进程、零个或一个控制进程以及单元控制组中的任意数量的其他进程组成。但是,并非所有单元类型都管理这些类型的进程。例如,对于 mount 单元,定义了控制进程(即 `/usr/bin/mount` 和 `/usr/bin/umount` 的调用),但未定义主进程。如果省略,则默认为 `all`,除非使用了 `--kill-subgroup=`,在这种情况下,默认为 `cgroup`。

在版本 252 中添加。

--kill-value=INT

如果与 kill 命令一起使用,则会将指定的整数值参数与信号一起排队,并发送到指定的进程。此操作仅适用于 POSIX 实时信号(即 --signal=SIGRTMIN+... 或 --signal=SIGRTMAX-...),并确保通过 sigqueue(3) 系统调用生成信号,而不是 kill(3)。指定的值必须是 32 位有符号整数,可以以十进制、十六进制(如果以 "0x" 为前缀)、八进制(如果以 "0o" 为前缀)或二进制(如果以 "0b" 为前缀)形式指定。

如果使用此选项,信号将仅排队并发送到单元的主进程或控制进程,绝不会发送到属于该单元的其他进程,即 --kill-whom=all 仅影响主进程和控制进程,而不会影响其他进程。

在版本 254 中添加。

--kill-subgroup=PATH

获取控制组子路径,以便与 kill 命令一起发送信号。默认情况下,所选信号会发送到单元 cgroup 的所有进程(以及主进程/控制进程(如果位于 cgroup 外部)——受 --kill-whom= 的影响)。但是,可以使用此选项选择一个子组。此功能仅在将 "cgroup" 或 "cgroup-fail" 与 --kill-whom= 一起使用时可用,实际上,如果使用 --kill-subgroup=,则后者是默认设置。

指定的路径可以,但不必须以斜杠为前缀,并且无论是否存在斜杠,路径都将相对于单元的主控制组路径。

此功能仅适用于启用了控制组委托的单元(请参阅 systemd.resource-control(5) 中的 Delegate=)。

在版本 258 中添加。

-s, --signal=

与 kill 命令一起使用时,选择要发送到所选进程的信号。必须是已知的信号说明符之一,例如 SIGTERM、SIGINT 或 SIGSTOP。如果未指定,则默认值为 SIGTERM。

特殊值 "help" 将列出已知的值,然后程序将立即退出,特殊值 "list" 将列出已知的值以及数字信号编号,然后程序将立即退出。

--what=

与 clean 命令一起使用时,选择在调用 clean 命令时要删除的每单元资源类型,请参见上方。接受 configuration、state、cache、logs、runtime、fdstore 中的一个,以选择资源类型。可以多次指定此选项,在这种情况下,将删除所有指定的资源类型。还接受特殊值 all,作为指定所有六种资源类型的快捷方式。如果未指定此选项,则默认值为 cache、runtime 和 fdstore 的组合,即通常被认为是冗余的并且可以在下次调用时重建的三种资源。请注意,显式删除 fdstore 资源类型仅在启用了 FileDescriptorStorePreserve= 选项时才有用,因为文件描述符存储在停止单元时会自动清理。


243版本中添加。

-f, --force

与enable一起使用时,会覆盖任何现有的冲突符号链接。

与edit一起使用时,会创建所有尚未存在的指定单元。

与suspend、hibernate、hybrid-sleep或suspend-then-hibernate一起使用时,会忽略systemd-logind返回的错误,并直接通过启动相应的单元来执行操作。

与halt、poweroff、reboot或kexec一起使用时,会执行选定的操作,而无需关闭所有单元。但是,所有进程都会被强制终止,并且所有文件系统都会被卸载或重新挂载为只读。因此,这是一个强制执行立即重启的非常规但相对安全的选项。如果对这些操作(kexec除外)指定--force两次,则它们将立即执行,而无需终止任何进程或卸载任何文件系统。

警告 对任何这些操作指定--force两次可能会导致数据丢失。请注意,当指定--force两次时,所选操作由systemctl本身执行,并且不会联系系统管理器。这意味着即使系统管理器崩溃,该命令也应该成功。

--message=

与halt、poweroff或reboot一起使用时,设置一个简短的消息来解释操作的原因。该消息将与默认的关机消息一起记录。

225版本中添加。

--now

与enable、disable、mask或reenable一起使用时,在指定的单元文件操作成功后,也会启动/停止/尝试重新启动单元。

220版本中添加。

--root=

与enable/disable/is-enabled(以及相关命令)一起使用时,在使用指定的文件系统路径查找单元文件。如果存在此选项,systemctl将直接对文件系统进行操作,而不是通过与systemd守护进程通信来执行更改。

--image=image

接受指向磁盘映像文件或块设备节点的路径。如果指定,则所有操作都将应用于指示的磁盘映像中的文件系统。此选项类似于--root=,但对存储在磁盘映像或块设备中的文件系统进行操作。磁盘映像应仅包含一个文件系统,或包含符合[2] UAPI.2 Discoverable Partitions Specification中GPT分区表的多个文件系统。有关受支持的磁盘映像的更多信息,请参见systemd-nspawn(1)中具有相同名称的开关。


--image-policy=policy
接受一个图像策略字符串作为参数,具体请参考 systemd.image-policy(7)。该策略在对通过 --image= 指定的磁盘镜像执行操作时生效,请参阅上述内容。如果未指定,则默认使用 "*" 策略,即使用图像中所有已识别的文件系统。

--runtime
与 enable、disable、edit(以及相关命令)一起使用时,仅进行临时更改,以便在下次重新启动时丢失。这将产生以下效果:更改不会在 /etc/ 的子目录中进行,而是在 /run/ 中进行,但立即效果相同,但是,由于后者在重新启动后会丢失,因此更改也会丢失。

同样,与 set-property 一起使用时,仅进行临时更改,以便在下次重新启动时丢失。

--preset-mode=
接受以下值之一:"full"(默认值)、"enable-only"、"disable-only"。与 preset 或 preset-all 命令一起使用时,控制是否应根据预设规则禁用和启用单元,或者仅启用,或者仅禁用。

-n, --lines=
与 status 命令一起使用时,控制要显示的日志行数,从最近的行开始计算。接受一个正整数参数,或者 0 以禁用日志输出。默认为:

-o, --output=
与 status 命令一起使用时,控制显示的日志条目的格式。有关可用选项,请参阅 [journalctl]({filename}../../journalctl)(1)。默认为 "short"。

--firmware-setup
与 reboot、poweroff 或 halt 命令一起使用时,指示系统固件在下一次启动时启动到固件设置界面。请注意,并非所有系统都支持此功能。

--boot-loader-menu=timeout
与 reboot、poweroff 或 halt 命令一起使用时,指示系统的引导程序在下一次启动时显示引导程序菜单。接受一个时间值作为参数——指示菜单超时时间。传递零以禁用菜单超时。请注意,并非所有引导程序都支持此功能。

--boot-loader-entry=ID
与 reboot、poweroff 或 halt 命令一起使用时,指示系统的引导程序在下一次启动时启动到特定的引导程序条目。接受一个引导程序条目标识符作为参数,或者使用 "help" 以列出可用的条目。请注意,并非所有引导程序都支持此功能。

--reboot-argument=
此开关与 reboot 一起使用。该值是特定于体系结构和固件的。例如,“recovery” 可用于触发系统恢复,并且“fota” 可用于触发“空中固件”更新。

pretty (默认)
“年-月-日 时:分:秒 时区”

自版本 248 起添加。

unix
“@自纪元以来的秒数”

自版本 251 起添加。

us, μs
“年-月-日 时:分:秒.微秒 时区”

自版本 248 起添加。

utc
“年-月-日 时:分:秒 UTC”

自版本 248 起添加。

us+utc, μs+utc
“年-月-日 时:分:秒.微秒 UTC”

自版本 248 起添加。

自版本 247 起添加。

--mkdir

与 bind 配合使用时,在应用 bind 挂载之前,会创建目标文件或目录。请注意,虽然此选项的名称表明它仅适用于 目录,但此选项也会创建目标文件节点以进行挂载,即使要挂载的对象不是目录,而是普通文件、设备节点、套接字或 FIFO。

自版本 248 起添加。

--marked

仅允许与 reload-or-restart 配合使用。为所有具有 “needs-restart”标记的单元排队重启任务,为具有“needs-reload”标记的单元排队重载任务。如果标记为重载的单元不支持重载,则会排队重启。可以使用 set-property Markers=... 设置这些属性。

除非使用 --no-block,systemctl 将等待排队的任务完成。

自版本 248 起添加。

--read-only

与 bind 配合使用时,会创建只读 bind 挂载。

自版本 248 起添加。

--drop-in=NAME

与 edit 配合使用时,将 NAME 作为 drop-in 文件名,而不是 override.conf。

自版本 253 起添加。

--when=

与 halt、poweroff、reboot 或 kexec 配合使用时,安排在给定的时间戳执行该操作,该时间戳应符合 systemd.time(7) 的“解析时间戳”部分中记录的语法。特别是,如果给出“show”,则将显示当前安排的操作,可以通过传递一个空字符串或“cancel”来取消。 “auto” 将根据维护窗口或一分钟后安排该操作。

自版本 254 起添加。

--stdin

与 edit 配合使用时,文件的内容将从标准输入读取,并且不会启动编辑器。在这种模式下,文件的旧内容将被完全替换。这对于从脚本“编辑”单元文件非常有用:

$ systemctl edit --drop-in=limits.conf --stdin some-service.service <<EOF
[Unit]
AllowedCPUs=7,11
EOF

可以以这种模式“编辑”多个 drop-in 文件;相同的内容将被写入所有文件中。

自版本 256 起添加。

-H, --host=

远程执行该操作。指定一个主机名,或用“@”分隔的用户名和主机名。主机名可以选择性地以端口号为后缀,该端口号是 ssh 正在侦听的端口,并用冒号分隔,然后是容器名称,并用斜杠分隔,这会直接连接到指定主机上的特定容器。这将使用 SSH 与远程机器管理器实例进行通信。可以使用 machinectl -H HOST 枚举容器名称。将 IPv6 地址放在方括号中。

-M, --machine=

在本地容器上执行操作。指定要连接的容器名称,可以选择性地在前面加上用户名,并用“@”字符分隔。如果使用特殊字符串“.host”代替容器名称,则将建立到本地系统的连接(这对于连接到特定用户的用户总线非常有用:--user [email protected])。如果未使用“@”语法,则将作为 root 用户建立连接。如果使用“@”语法,则左侧或右侧都可以省略(但不能同时省略),在这种情况下,将假定本地用户名和“.host”。


-C, --capsule=
对一个 capsule 执行操作。指定要连接的 capsule 名称。有关 capsule 的详细信息,请参阅 [email protected](5)。

自版本 256 起添加。

--no-ask-password
对于需要权限的操作,不要提示用户进行身份验证。

--no-pager
不要将输出管道传输到分页器。

--legend=BOOL
启用或禁用打印图例,即列标题和带有提示的页脚。默认情况下,会打印图例,除非使用 --quiet 或类似选项将其禁用。

-h, --help
打印简短的帮助文本并退出。

--version
打印简短的版本字符串并退出。

退出状态

成功时,返回 0,否则返回非零的失败代码。

systemctl 使用 LSB 中定义的返回代码,如 LSB 3.0.0[3] 中所述。

表 5. LSB 返回代码

┌───────┬────────────────────────────┬──────────────────────────┐
│ Value │ LSB 中的描述                 │ 在 systemd 中的使用           │
├───────┼────────────────────────────┼──────────────────────────┤
│ 0     │“程序正在运行或服务正常”     │ unit 处于活动状态             │
├───────┼────────────────────────────┼──────────────────────────┤
│ 1     │“程序已停止且 /var/run pid 文件存在” │ unit 未失败(由 is-failed 使用) │
├───────┼────────────────────────────┼──────────────────────────┤
│ 2     │“程序已停止且 /var/lock 锁文件存在” │ 未使用                       │
├───────┼────────────────────────────┼──────────────────────────┤
│ 3     │“程序未运行”                 │ unit 未处于活动状态           │
├───────┼────────────────────────────┼──────────────────────────┤
│ 4     │“程序或服务状态未知”         │ 没有这样的 unit               │
└───────┴────────────────────────────┴──────────────────────────┘

LSB 服务状态到 systemd 单元状态的映射并不完美,因此最好不要依赖这些返回值,而是查找特定的单元状态和子状态。

环境变量

$SYSTEMD_EDITOR
用于编辑单元的编辑器;它会覆盖 $EDITOR 和 $VISUAL。如果 $SYSTEMD_EDITOR、$EDITOR 或 $VISUAL 中没有设置,或者它们被设置为空字符串,或者它们的执行失败,systemctl 将尝试按以下顺序执行众所周知的编辑器:editor(1)、[nano]({filename}../../nano)(1)、[vim]({filename}../../vim)(1)、vi(1)。

自版本 218 起添加。

$SYSTEMD_LOG_LEVEL
输出消息的最大日志级别(具有更高日志级别(即不太重要的级别)的消息将被抑制)。接受逗号分隔的值列表。一个值可以是以下之一(按重要性递减的顺序):emerg、alert、crit、err、warning、notice、info、debug,或者在 0 到 7 的范围内的一个整数。有关更多信息,请参见 syslog(3)。每个值都可以选择性地以 console、syslog、kmsg 或 journal 开头,后跟一个冒号,以设置特定日志目标的最高日志级别(例如,$SYSTEMD_LOG_LEVEL=debug,console:info 指定将以调试级别进行日志记录,但当输出到控制台时,应以信息级别进行日志记录)。请注意,全局最大日志级别优先于任何每个目标的最高日志级别。

$SYSTEMD_LOG_COLOR
一个布尔值。如果为 true,则写入 tty 的消息将根据优先级进行颜色编码。

此设置仅在消息直接写入终端时有用,因为 [journalctl]({filename}../../journalctl)(1) 和其他显示日志的工具将根据日志级别自行对消息进行颜色编码。

$SYSTEMD_LOG_TIME
一个布尔值。如果为 true,则控制台日志消息将以时间戳作为前缀。

此设置仅在消息直接写入终端或文件时有用,因为 [journalctl]({filename}../../journalctl)(1) 和其他显示日志的工具将根据条目元数据附加时间戳。

$SYSTEMD_LOG_LOCATION
一个布尔值。如果为 true,则消息将以文件名和源代码中消息的行号作为前缀。

请注意,日志位置通常作为元数据附加到日志条目中。但是,将其直接包含在消息文本中,在调试程序时仍然可能很方便。

$SYSTEMD_LOG_TARGET
日志消息的目标位置。可以是 console(记录到附加的 tty)、console-prefixed(记录到附加的 tty,但带有编码日志级别和“facility”的前缀,请参见 syslog(3))、kmsg(记录到内核循环日志缓冲区)、journal(记录到日志)、journal-or-kmsg(如果可用,则记录到日志,否则记录到 kmsg)、auto(自动确定适当的日志目标,这是默认设置)或 null(禁用日志输出)。

$SYSTEMD_PAGER, $PAGER
当未提供 `--no-pager` 时,要使用的分页器。如果设置了 `$SYSTEMD_PAGER`,则使用它;否则,使用 `$PAGER`。如果两者都没有设置,则会依次尝试一系列众所周知的分页器实现,包括 [less]({filename}../../less)(1) 和 more(1),直到找到一个。如果未发现任何分页器实现,则不会调用任何分页器。将这些环境变量设置为空字符串或值“cat”与传递 `--no-pager` 效果相同。

注意:如果未设置 `$SYSTEMD_PAGERSECURE`,则只能使用 `$SYSTEMD_PAGER` 和 `$PAGER` 来禁用分页器(使用“cat”或“”),否则它们将被忽略。

$SYSTEMD_LESS
覆盖传递给 less 的选项(默认值为“FRSXMK”)。

用户可能希望更改两个特定选项:

K
此选项指示分页器在按下 Ctrl+C 时立即退出。要允许 less 处理 Ctrl+C 本身,以便切换回分页器命令提示符,请取消设置此选项。

如果 `$SYSTEMD_LESS` 的值不包含“K”,并且调用的分页器是 less,则 Ctrl+C 将被可执行文件忽略,并且需要由分页器处理。

X
此选项指示分页器不向终端发送 termcap 初始化和反初始化字符串。默认情况下,它被设置为允许命令输出在分页器退出后仍然显示在终端中。但是,这会阻止某些分页器功能起作用,特别是无法使用鼠标滚动分页输出。

请注意,设置常规的 `$LESS` 环境变量对 systemd 工具通过 less 进行的调用没有影响。

请参阅 [less]({filename}../../less)(1) 以获取更多讨论。

$SYSTEMD_LESSCHARSET
覆盖传递给 less 的字符集(默认值为“utf-8”,如果确定调用的终端与 UTF-8 兼容)。

请注意,设置常规的 `$LESSCHARSET` 环境变量对 systemd 工具通过 less 进行的调用没有影响。

$SYSTEMD_PAGERSECURE
像 [less]({filename}../../less)(1) 这样的常见分页器命令,除了“分页”,即滚动输出外,还支持打开或写入其他文件以及运行任意 shell 命令。当命令以提升的权限调用时,例如在 [sudo]({filename}../../sudo)(8) 或 pkexec(1) 下,分页器将成为一个安全边界。必须注意,仅使用具有严格限制的功能的程序作为分页器,并且不允许使用意外的交互功能,如打开或创建新文件或启动子进程。如果分页器支持,可以启用分页器的“安全模式”,如下所示(大多数分页器并非以考虑到这一点的方式编写的)。建议要么显式启用“安全模式”,要么完全禁用分页器,使用 `--no-pager` 或 `PAGER=cat`,以便允许不受信任的用户以提升的权限执行命令。

此选项接受一个布尔值参数。当设置为 true 时,将启用分页器的“安全模式”。在“安全模式”下,调用分页器时将设置 LESSSECURE=1,指示分页器禁用打开或创建新文件或启动新子进程的命令。目前,只有 less(1) 才知道并实现了“安全模式”。

当设置为 false 时,不会对分页器施加任何限制。设置 SYSTEMD_PAGERSECURE=0 或不从继承的环境中删除它可能会允许用户调用任意命令。

如果未设置 $SYSTEMD_PAGERSECURE,systemd 工具会尝试自动确定是否应启用“安全模式”以及分页器是否支持它。如果有效的 UID 与登录会话的所有者不同,请参见 geteuid(2) 和 sd_pid_get_owner_uid(3),或者在运行 sudo(8) 或类似工具(设置了 $SUDO_UID [4])时,将启用“安全模式”。在这种情况下,将设置 SYSTEMD_PAGERSECURE=1,并且不使用不已知悉并实现“安全模式”的分页器。请注意,此自动检测仅涵盖最常见的特权提升机制,旨在提供便利。建议显式设置 $SYSTEMD_PAGERSECURE 或禁用分页器。

请注意,如果希望使用 $SYSTEMD_PAGER 或 $PAGER 变量,而不是仅禁用分页器,则必须同时设置 $SYSTEMD_PAGERSECURE。

$SYSTEMD_COLORS

接受一个布尔值参数。如果为 true,systemd 和相关实用程序将在其输出中使用颜色,否则输出将为单色。此外,变量可以采用以下特殊值:“16”、“256”,以限制将颜色的使用限制为基本 16 或 256 种 ANSI 颜色。这可以用来覆盖基于 $TERM 和控制台连接方式所做的自动决策。

$SYSTEMD_URLIFY

该值必须为布尔值。控制是否应为支持此功能的终端模拟器生成输出中的可点击链接。这可以用来覆盖 systemd 基于 $TERM 和其他条件所做的决策。

参阅

systemd(1)、journalctl(1)、loginctl(1)、machinectl(1)、systemd.unit(5)、systemd.resourcecontrol(5)、systemd.special(7)、wall(1)、systemd.preset(5)、systemd.generator(7)、glob(7)

注意

UAPI.1 引导加载程序规范
https://uapi-group.org/specifications/specs/boot_loader_specification

UAPI.2 可发现分区规范
https://uapi-group.org/specifications/specs/discoverable_partitions_specification

LSB 3.0.0
http://refspecs.linuxbase.org/LSB_3.0.0/LSB-PDA/LSB-PDA/iniscrptact.html

建议其他工具在适当的情况下设置和检查 $SUDO_UID,并将其视为通用接口。