systemd.special 中文手册

译者:金步国


版权声明

本文译者是一位开源理念的坚定支持者,所以本文虽然不是软件,但是遵照开源的精神发布。

其他作品

本文译者十分愿意与他人分享劳动成果,如果你对我的其他翻译作品或者技术文章有兴趣,可以在如下位置查看现有的作品集:

联系方式

由于译者水平有限,因此不能保证译文内容准确无误。如果你发现了译文中的错误(哪怕是错别字也好),请来信指出,任何提高译文质量的建议我都将虚心接纳。


手册索引 . 指令索引systemd-231

名称

systemd.special — 特殊的 systemd 单元

大纲

basic.target, bluetooth.target, ctrl-alt-del.target, cryptsetup.target, cryptsetup-pre.target, dbus.service, dbus.socket, default.target, display-manager.service, emergency.target, exit.target, final.target, getty.target, graphical.target, halt.target, hibernate.target, hybrid-sleep.target, initrd-fs.target, kbrequest.target, kexec.target, local-fs.target, local-fs-pre.target, multi-user.target, network.target, network-online.target, network-pre.target, nss-lookup.target, nss-user-lookup.target, paths.target, poweroff.target, printer.target, reboot.target, remote-fs.target, remote-fs-pre.target, rescue.target, initrd-root-device.target, initrd-root-fs.target, rpcbind.target, runlevel2.target, runlevel3.target, runlevel4.target, runlevel5.target, shutdown.target, sigpwr.target, sleep.target, slices.target, smartcard.target, sockets.target, sound.target, suspend.target, swap.target, sysinit.target, syslog.socket, system-update.target, time-sync.target, timers.target, umount.target, -.slice, system.slice, user.slice, machine.slice

描述

一些被 systemd 特殊处理的单元。 这些单元的名字都有特定的含义,并且不能被改命名。

特殊的系统单元

basic.target

启动基本系统。

所有服务单元(明确设置了 DefaultDependencies=no 的除外)都自动隐含了 After=basic.target 依赖。

该目标一般间接包含了:所有本地挂载点 mount 单元、 /var, /tmp, /var/tmp 挂载点 mount 单元、 swap, socket, timer, path 单元, 以及其他系统守护进程通常必需的系统初始化单元。 注意,本地挂载点 mount 单元在某些特定情形下也可以是远程网络文件系统。

该目标一般仅直接包含其他 target 单元。 在完整的系统启动过程中, 该目标只是一个用于分隔不同启动阶段的同步节点。详见 bootup(7) 手册。

ctrl-alt-del.target

当在控制台上按下 Control+Alt+Del 组合键时要启动的目标单元。 通常是一个指向 reboot.target 的软连接(别名)

cryptsetup.target

专用于安装加密块设备的目标单元。

dbus.service

专用于启动 D-Bus 总线守护进程的服务单元。 当此服务启动完成之后,systemd 将会连接到此服务上注册其他各种服务。

dbus.socket

专用于 D-Bus 系统总线的套接字单元。 所有 Type=dbus 的单元都自动依赖于此单元。

default.target

默认的启动目标。 通常是指向 multi-user.targetgraphical.target 的软连接(别名)。

可用 systemd.unit= 内核引导选项指定它。

display-manager.service

显示管理器服务。 通常是指向 gdm.service 或类似的显示管理器服务的软连接(别名)。

emergency.target

紧急维修模式,专用于在控制台上启动一个紧急维修 shell 。 该单元不包含任何其他 service 或 mount 单元。 它仅启动一个运行交互式 shell 的最小化系统,通常仅在其中运行一个 systemd 进程(PID=1)以及一个 shell 进程。 此单元一般仅用于两种情况: (1)作为内核引导选项 systemd.unit= 的参数; (2)某个必需的文件系统检查失败导致无法继续启动。 与此单元用途类似的 rescue.target 则会启动一些最基本的服务并且挂载所有文件系统。

"systemd.unit=emergency.target" 内核引导选项 有一个兼容传统 SysV 风格的 "emergency" 等价缩写。

启动到 emergency.target 在很大程度上 相当于使用 "init=/bin/sh" 内核引导选项, 不同之处在于紧急维修模式额外提供了完整的系统与服务管理功能, 从而可以启动特定的单元以继续完成未尽的启动流程。

exit.target

专用于关闭系统或 systemd 用户实例。 对于不在容器中运行的常规系统来说, 等价于 poweroff.target ; 但亦可在容器中使用。

systemd 将会在收到通过 D-Bus 传来的关机请求时启动该目标; 当 systemd 以用户实例运行时,亦可在收到 SIGTERMSIGINT 信号时启动该目标。

通常,此单元间接包含 shutdown.target 单元。

final.target

专用于关机流程尾部的目标单元。 用于容纳那些 应该在常规服务全部退出、并且所有挂载点全部卸载之后 才能停止的服务。

getty.target

专用于包含静态配置的本地 getty 实例的目标单元。

graphical.target

专用于启动图形化登录界面的目标单元, 其中包含了 multi-user.target 单元。

所有专用于实现图形化登录的单元的 "[Install]" 小节中, 都应该包含 WantedBy=graphical.target 指令, 以确保这些单元被添加到了 graphical.target 单元中。

hibernate.target

专用于"休眠到硬盘"的目标单元, 其中包含了 sleep.target 单元。

hybrid-sleep.target

专用于同时"休眠到硬盘"以及"休眠到内存"的目标单元, 其中包含了 sleep.target 单元。

halt.target

专用于关闭系统但并不切断电源的目标单元。 它与关闭系统并切断电源的 poweroff.target 单元并不相同。

如果应用程序只想关闭系统但并不切断电源(必须手动关闭电源), 那么应该启动此目标。

initrd-fs.target

systemd-fstab-generator(3) 会自动将 Before=initrd-fs.target 添加到 sysroot-usr.mount 单元中, 以及从 /etc/fstab 中带有 x-initrd.mount 选项且不带 noauto 选项的挂载点派生的 mount 单元中。

kbrequest.target

当在控制台上按下 Alt+↑ 组合键时要启动的目标单元。 通常是指向 rescue.target 的软连接(别名)。

kexec.target

专用于通过内核的 kexec 接口重启整个系统。

如果应用程序想要通过内核的 kexec 接口重启整个系统, 可以启动此目标单元。

local-fs.target

专用于集合本地文件系统挂载点的目标单元。 systemd-fstab-generator(3) 会自动将 Before=local-fs.target 添加到所有本地挂载点所对应的 mount 单元中。 同时,对于 /etc/fstab 中带有 auto 选项的挂载点, 也会在 local-fs.target 中自动添加 指向这些自动挂载点所对应的 mount 单元的 Wants= 依赖。

multi-user.target

专用于启动多用户命令行环境(而非图形界面)的目标单元。 通常包含在 graphical.target 中。

所有用于实现多用户命令行环境的单元的 "[Install]" 小节中, 都应该包含 WantedBy=multi-user.target 指令, 以确保这些单元被添加到了 multi-user.target 单元中。

network-online.target

对于那些严格要求必须存在真实可用的网络连接的单元, 应该在其单元文件中包含 Wants=network-online.targetAfter=network-online.target 指令。 此目标单元意在包含一个能够将执行流程一直阻塞到网络变为真实可用为止的服务单元。 具体的实现方法取决于网络管理服务所实际使用的网络管理工具。

注意,network-online.target 是一个主动单元(被功能使用者包含而不是被功能提供者包含), 它包含的服务单元可以将执行流程一直阻塞到网络变为真实可用为止。 相反,network.target 是一个被动单元(被功能提供者包含而不是被功能使用者包含), 它不会导致执行流程出现明显的阻塞。 一般来说, network.target 是系统启动流程中的一部分, 而 network-online.target 则不是(除非确有某些单元依赖于它)。 详情参见 Running Services After the Network is up 文档。

所有用于挂载远程网络文件系统的 mount 单元都自动包含 Wants=network-online.targetAfter=network-online.target 指令。 注意,仅向网络上其他主机提供服务的守护进程通常并不依赖于此单元。

paths.target

专用于包含所有应该在系统启动过程中被启动的 path 单元(参见 systemd.path(5) 手册)。

基于路径启动机制的软件包安装的 path 单元的 "[Install]" 小节中必须包含 WantedBy=paths.target 指令, 以确保这些单元被添加到了 paths.target 单元中。

poweroff.target

专用于关闭系统并切断电源的目标单元。

如果应用程序希望关闭系统并切断电源, 那么应该启动此目标。

为了保持与SysV的兼容性, runlevel0.target 是此单元的一个别名(软连接)。

reboot.target

专用于重新启动系统的目标单元。

如果应用程序希望重启系统, 那么应该启动此目标。

为了保持与SysV的兼容性, runlevel6.target 是此单元的一个别名(软连接)。

remote-fs.target

专用于集合远程文件系统挂载点的目标单元,其他与 local-fs.target 相似。

After=remote-fs.target 将被自动添加到所有引用了 "$remote_fs" 的SysV初始化脚本单元中。

rescue.target

专用于启动基本系统(挂载所有文件系统)并打开一个救援shell的单元(也就是进入救援模式)。 系统管理员可以使用 systemctl isolate rescue.target 命令进入单用户救援模式。 在此模式下,所有文件系统都保持挂载状态,同时仅运行最基本的系统服务([译者注]除 udevd, journal 之外的其他服务都将被停止)。 注意,与此单元类似的 emergency.target 更加精简,既不提供已挂载的文件系统, 也不提供最基本的系统服务。

为了保持与SysV的兼容性, runlevel1.target 是此单元的一个别名(软连接)。

"systemd.unit=rescue.target" 内核引导选项 有一个兼容传统 SysV 风格的 "1" 等价缩写。

initrd-root-device.target

专用于 initrd 环境的目标单元,表示根文件系统设备已经可用, 但是尚未挂载。 systemd-fstab-generator(3)systemd-gpt-auto-generator(3) 会在实际挂载根文件系统之前,自动设置对此单元的依赖。

initrd-root-fs.target

systemd-fstab-generator(3) 会自动将 Before=initrd-root-fs.target 添加到 sysroot.mount 单元中。 [提示] sysroot.mount 是根据内核引导选项自动生成的单元,封装了根分区的挂载点。

runlevel2.target, runlevel3.target, runlevel4.target, runlevel5.target

仅用于兼容传统SysV的目标单元, 相当于传统的 2, 3, 4, 5 运行级。 通常将 2, 3, 4 作为 multi-user.target 的别名(软连接), 而将 5 作为 graphical.target 的别名(软连接)。

shutdown.target

专用于在关机过程中关闭所有的服务单元。

除非明确设置了 DefaultDependencies=no , 否则所有在关机时需要关闭的服务都隐含了 Conflicts=shutdown.targetBefore=shutdown.target 指令。

sigpwr.target

专用于 systemd 收到 SIGPWR 信号时启动的目标单元。 当电力发生中断时,内核或UPS(不间断电源)守护进程将会发送此信号。

sleep.target

专用于进入休眠状态的目标单元。 包含在 suspend.target, hibernate.target, hybrid-sleep.target 之中。

slices.target

专用于包含所有应该在系统启动过程中被启动的 slice 单元(参见 systemd.slice(5) 手册)。该单元默认包含 user.slice, system.slice, machines.slice, -.slice 单元,并且在这些单元启动之后才能启动(见下文)。

建议在所有动态安装的 slice 单元的 "[Install]" 小节中添加 WantedBy=slices.target

sockets.target

专用于包含所有应该在系统启动过程中被启动的 socket 单元(参见 systemd.socket(5) 手册)。

基于套接字启动机制的软件包安装的 socket 单元的 "[Install]" 小节中必须包含 WantedBy=sockets.target 指令, 以确保这些单元被添加到了 sockets.target 单元中。

suspend.target

专用于"休眠到内存"的目标单元, 其中包含了 sleep.target 单元。

swap.target

专用于集合所有swap分区与swap文件的目标单元, 其他与 local-fs.target 相似。

sysinit.target

所有服务单元(明确设置了 DefaultDependencies=no 的除外)都自动隐含了 Requires=sysinit.targetAfter=sysinit.target 依赖。

该单元专用于包含必要的系统初始化服务。 所有包含在该单元中的系统服务都应该明确声明 DefaultDependencies=no , 并且手动设置所有的依赖关系 (也就是只能假设当前仅存在一个只读根文件系统)。 详见 bootup(7) 手册。

syslog.socket

syslog 实例应该监听的套接字单元。 所有用户空间的日志信息都可以从这个套接字中获取。 有关 syslog 整合的更多详情, 参见 Syslog Interface 文档。

system-update.target

专用于离线系统更新的目标单元。 如果文件系统上存在 /system-update ,那么 systemd-system-update-generator(8) 将会把启动目标重定向到此目标。 详见 System Updates Specification 文档。

timers.target

专用于包含所有应该在系统启动过程中被启动的 timer 单元(参见 systemd.timer(5) 手册)。

基于定时器启动机制的软件包安装的 timer 单元的 "[Install]" 小节中必须包含 WantedBy=timers.target 指令, 以确保这些单元被添加到了 timers.target 单元中。

umount.target

专用于在系统关闭过程中卸载所有需要卸载的文件系统 (无论是手动挂载的还是自动挂载的)。

除非明确设置了 DefaultDependencies=no , 否则所有 mount 单元都隐含了 Conflicts=umount.target 指令。

特殊的系统设备单元

某些特殊的目标单元专门用于表明系统中出现了特定类型的设备。 这些特殊的目标单元可用于在插入某种类型的设备时自动启动对应的服务。

bluetooth.target

如果有某个蓝牙控制器被插入或变得可用, 那么该目标单元将会被自动启动。

此目标单元可以通过包含蓝牙管理服务, 以实现在发现蓝牙设备时自动启动蓝牙管理服务。

printer.target

如果有某个打印机被插入或变得可用, 那么该目标单元将会被自动启动。

此目标单元可以通过包含打印机管理服务, 以实现在发现打印机时自动启动打印机管理服务。

smartcard.target

如果有某个智能卡控制器被插入或变得可用, 那么该目标单元将会被自动启动。

此目标单元可以通过包含智能卡管理服务, 以实现在发现智能卡设备时自动启动智能卡管理服务。

sound.target

如果有某个声卡被插入或变得可用, 那么该目标单元将会被自动启动。

此目标单元可以通过包含音频管理服务, 以实现在发现声卡时自动启动音频管理服务。

特殊的被动系统单元

为了确保在系统启动过程中,可选的服务单元能够以正确的顺序启动, 专门定义了一些目标单元。 这些目标单元并不是启动流程的默认部分, 除非被明确的包含在实际实现某个功能的服务单元中。 注意,这些被动目标单元通常并不是被功能的使用者包含,而是被功能的提供者包含。 也就是说,需要使用某功能的服务单元(使用者), 应该将自身的启动顺序排在这些目标单元之后, 而不是包含这些目标单元。 而提供某功能的服务单元(提供者), 应该将自身的启动顺序排在这些目标单元之前, 并且通过 Wants= 选项包含这些目标单元。

注意,被动单元只能被当作依赖关系包含在其他单元中,而不能被直接手动启动。 也就是说类似 "systemctl start time-sync.target" 这样的命令会失败。 因为被动单元存在的意义仅仅是为了确保正确的启动顺序。

cryptsetup-pre.target

那些必须在加密块设备可用之前启动的服务单元可以包含此目标。 当此目标单元启动后, 所有的加密块设备就都可以访问了。 因为关机流程的顺序与开机流程正好相反, 所以此目标单元还可用于确保特定的服务单元 仅在所有的加密快设备关闭之后再停止。

local-fs-pre.target

此目标单元自动排在所有需要自动挂载的本地文件系统挂载点 (带有 auto 挂载选项)之前。 可用于确保在挂载本地文件系统之前启动某些单元。

network.target

此目标单元用于表明网络可用,但是由于其定义的脆弱性, 它事实上只有一个用途: 在关机时, 确保所有包含 After=network.target 的单元 都在关闭网络(无论网络实际处于何种状态)之前被优先关闭。 因此对于那些需要在关闭时访问网络的服务来说, 应该将其自身排在此目标单元之后(但是不要包含此目标单元)。 参见 Running Services After the Network is up 文档以及上文的 network-online.target 目标单元。

After=network.target 将被自动添加到所有引用了 "$network" 的SysV初始化脚本单元中。

network-pre.target

此目标单元可用于包含在 所有想要在网络可用之前启动的服务单元中(例如设置防火墙)。 所有的网络管理软件都应该排在此目标单元之后,但却不应该包含它。

nss-lookup.target

专用于标记所有主机与网络的名字查找服务都已可用的目标单元。 注意,这不包括用户/组的名字查找功能,这是 nss-user-lookup.target 的功能。 所有依赖于主机与网络的名字查找服务的服务单元, 都必须排在该目标单元之后启动, 但却不应该包含它。 After=nss-lookup.target 将被自动添加到所有引用了 "$named" 的SysV初始化脚本单元中。

nss-user-lookup.target

专用于标记所有用户与组的名字查找服务都已可用的目标单元。 注意,这不包括主机/网络的名字查找功能,这是 nss-lookup.target 的功能。 所有依赖于用户与组的名字查找服务的服务单元, 都必须排在该目标单元之后启动,但却不应该包含它。 注意,查找系统用户总是可用的,并不需要此目标单元的帮助, 因此也就不需要考虑与此单元之间的顺序。

remote-fs-pre.target

此目标单元自动排在所有远程文件系统挂载点之前(见上文)。 可用于确保在挂载远程文件系统之前启动某些单元。 注意,除非在某些单元中包含了 Wants=remote-fs-pre.target 依赖, 否则此单元并不是系统初始化过程中的一部分。 如果某单元想要被第一个启动的远程挂载点包含, 那么它应该使用上文的 network-online.target 目标单元。

rpcbind.target

专用于标记 portmapper/rpcbind 服务可用的单元。 提供 portmapper/rpcbind 服务的单元应该包含此目标单元, 并将其自身排在此单元之前启动。 After=rpcbind.target 将被自动添加到所有引用了 "$portmap" 的SysV初始化脚本单元中。

time-sync.target

此目标单元用于包含同步系统时钟的服务单元(例如NTP客户端), 这些同步系统时钟的服务单元应该先于此目标单元启动。 所有依赖于正确系统时间的服务单元都应该在此目标单元之后启动, 但是不应该包含此单元。 After=time-sync.target 将被自动添加到所有引用了 "$time" 的SysV初始化脚本单元中。

特殊的用户单元

当 systemd 以用户实例运行时, 将可以使用下面的特殊单元(含义参见上文中): exit.target, default.target, shutdown.target, sockets.target, timers.target, paths.target, bluetooth.target, printer.target, smartcard.target, sound.target

特殊的 slice 单元

下面四个特殊的 ".slice" 单元, 构成了为服务、用户、虚拟机/容器 分配资源的基础层次结构。

-.slice

这是所有层次结构的"根", 通常并不直接包含其他单元, 但是可用于设置整棵树的默认值。

system.slice

默认情况下,所有由 systemd 系统实例启动的系统服务 都包含在这个 slice 中。

user.slice

默认情况下,所有以用户身份启动的进程与服务 (包括由 systemd 用户实例启动的) 都包含在这个 slice 中。

machine.slice

默认情况下, 所有通过 systemd-machined 注册的虚拟机与容器 都包含在这个 slice 中。

参见

systemd(1), systemd.unit(5), systemd.service(5), systemd.socket(5), systemd.target(5), systemd.slice(5), bootup(7), systemd-fstab-generator(8)