Provided by: manpages-zh_1.6.3.2-1_all bug

NAME

       systemd, init - systemd 系统与服务管理器

SYNOPSIS

       systemd [OPTIONS...]

       init [OPTIONS...] {COMMAND}

描述

       systemd 是一个专用于 Linux 操作系统的系统与服务管理器。 当作为启动进程(PID=1)运行时,它将
       作为初始化系统运行, 也就是启动并维护各种用户空间的服务。

       为了与传统的 SysV 兼容,如果将 systemd 以 init 名称启动,并且"PID≠1",那么它将执行 telinit
       命令并将所有命令行参数原封不动的传递过去。 这样对于普通的登陆会话来说,无论是调用 init 还
       是调用 telinit 都是等价的。 详见 telinit(8) 手册。

       当作为系统实例运行时, systemd 将会按照 system.conf 配置文件 以及 system.conf.d 配置目录中
       的指令工作; 当作为用户实例运行时,systemd 将会按照 user.conf 配置文件 以及 user.conf.d 配
       置目录中的指令工作。详见 systemd-system.conf(5) 手册。

选项

       能够识别的命令行选项如下:

       --test
           检测并输出启动序列,然后退出。 仅用于调试目的。

       --dump-configuration-items
           输出一个单元(unit)列表。 此列表简明且完整的列出了 所有单元文件中定义的"unit"。

       --unit=
           设置启动时默认启动的单元(unit)。 默认值是 default.target

       --system, --user
           --system 表示强制作为系统实例运行(即使"PID≠1"), --user 表示强制作为用户实例运行(即
           使"PID=1")。 通常不应该使用此选项。 此选项仅用于调试目的, 而且 --system 仅在与 --test
           一起使用时才有实际意义。

       --dump-core
           在崩溃时进行内核转储。 当作为用户实例运行时,此选项没有实际意义。 此选项还可以通过内核
           引导选项 systemd.dump_core= 开启 (参见"内核引导选项"小节)。

       --crash-vt=VT
           在崩溃时切换到指定的虚拟控制台(VT)。 当作为用户实例运行时,此选项没有实际意义。 可以设
           为一个 1–63 之间的整数或布尔值。 若设为整数则切换到指定编号的虚拟控制台; 若设为 yes
           则表示使用内核消息所使用的虚拟控制台; 若设为 no 则表示不切换到任何虚拟控制台。 此选项
           还可以通过内核引导选项 systemd.crash_vt= 设置 (参见"内核引导选项"小节)。

       --crash-shell
           在崩溃时启动一个 shell 。 当作为用户实例运行时,此选项没有实际意义。 此选项还可以通过
           内核引导选项 systemd.crash_shell= 开启 (参见"内核引导选项"小节)。

       --crash-reboot
           在崩溃时自动重启系统。 当作为用户实例运行时,此选项没有实际意义。 此选项还可以通过内核
           引导选项 systemd.crash_reboot= 开启 (参见"内核引导选项"小节)。

       --confirm-spawn
           在派生新进程时进行确认提示。 当作为用户实例运行时,此选项没有实际意义。

       --show-status=
           在系统启动过程中显示简明的服务状态信息。 当作为用户实例运行时,此选项没有实际意义。 其
           参数必须是一个表示真假的布尔值, 如果未指定则相当于设为 yes

       --log-target=
           设置日志的目标,其参数必须是 console, journal, kmsg, journal-or-kmsg, null 之一(小
           写)。

       --log-level=
           设置日志的等级, 其参数必须是一个数字或者 符合 syslog(3) 习惯的 emerg, alert, crit,
           err, warning, notice, info, debug 之一(小写)。

       --log-color=
           高亮重要的日志信息,其参数必须是一个表示真假的布尔值, 若未指定则相当于设为 yes

       --log-location=
           在日志中包含代码的位置, 其参数必须是一个表示真假的布尔值, 若未指定则相当于设为 yes
           。仅用于调试目的。

       --default-standard-output=, --default-standard-error=
           为所有的 service 与 socket 设置默认的标准输出与标准错误, 相当于设置 StandardOutput=StandardError= 指令的值(参见 systemd.exec(5) 手册)。其参数必须是 inherit, null,
           tty, journal, journal+console, syslog, syslog+console, kmsg, kmsg+console 之一(小写)。
           --default-standard-output= 的默认值是 journal ;而 --default-standard-error= 的默认值
           是 inherit

       --machine-id=
           覆盖文件系统上的 machine-id 设置, 常用于网络启动或容器。 禁止设为全零的值。

       -h, --help
           显示简短的帮助信息并退出。

       --version
           显示简短的版本信息并退出。

概念

       systemd 将各种系统启动和运行相关的对象, 表示为各种不同类型的单元(unit), 并提供了处理不同
       单元之间依赖关系的能力。 大部分单元都静态的定义在单元文件中 (参见 systemd.unit(5) 手册),
       但是有少部分单元则是动态自动生成的: 其中一部分来自于其他传统的配置文件(为了兼容性), 而另
       一部分则动态的来自于系统状态或可编程的运行时状态。 单元既可以处于活动(active)状态也可以处
       于停止(inactive)状态, 当然也可以处于启动中(activating)或停止中(deactivating)的状态。 还有
       一个特殊的失败(failed)状态, 意思是单元以某种方式失败了 (进程崩溃了、或者触碰启动频率限
       制、或者退出时返回了错误代码、或者遇到了操作超时之类的故障)。 当进入失败(failed)状态时,
       导致故障的原因将被记录到日志中以方便日后排查。 需要注意的是, 不同的单元可能还会有各自不同
       的"子状态", 但它们都被映射到上述五种状态之一。

       各种不同的单元类型如下:

        1. service 单元。用于封装一个后台服务进程。 参见 systemd.service(5) 手册。

        2. socket 单元。 用于封装一个系统套接字(UNIX)或互联网套接字(INET/INET6)或FIFO管道。 相应
           的服务在第一个"连接"进入套接字时才会被启动。 有关套接字单元的详情,参见
           systemd.socket(5) 手册;有关基于套接字或其他方式的启动,参见 daemon(7) 手册。

        3. target 单元。 用于将多个单元在逻辑上组合在一起。参见 systemd.target(5) 手册。

        4. device 单元。用于封装一个设备文件,可用于基于设备的启动。 并非每一个设备文件都需要一个
           device 单元, 但是每一个被 udev 规则标记的设备都必须作为一个 device 单元出现。参见
           systemd.device(5) 手册。

        5. mount 单元。 用于封装一个文件系统挂载点(也向后兼容传统的 /etc/fstab 文件)。参见
           systemd.mount(5) 手册。

        6. automount 单元。 用于封装一个文件系统自动挂载点,也就是仅在挂载点确实被访问的情况下才
           进行挂载。 它取代了传统的 autofs 服务。参见 systemd.automount(5) 手册。

        7. timer 单元。 用于封装一个基于时间触发的动作。它取代了传统的 atd, crond 等任务计划服
           务。参见 systemd.timer(5) 手册。

        8. swap 单元。 用于封装一个交换分区或者交换文件。 它与 mount 单元非常类似。参见
           systemd.swap(5) 手册。

        9. path 单元。 用于根据文件系统上特定对象的变化来启动其他服务。参见 systemd.path(5) 手
           册。

       10. slice 单元。 用于控制特定 CGroup 内(例如一组 service 与 scope 单元)所有进程的总体资源
           占用。 参见 systemd.slice(5) 手册。

       11. scope 单元。它与 service 单元类似,但是由 systemd 根据 D-bus 接口接收到的信息自动创
           建, 可用于管理外部创建的进程。参见 systemd.scope(5) 手册。

       单元的名称由单元文件的名称决定, 某些特定的单元名称具有特殊的含义,详情参见
       systemd.special(7) 手册。

       systemd 能够处理各种类型的依赖关系, 包括依赖与冲突(也就是 Requires=Conflicts= 指令),
       以及先后顺序(也就是 After=Before= 指令)。 注意, 上述两种类型的依赖关系(依赖与冲突、先
       后顺序)之间是相互独立的(无关的)。 举例来说,假定 foo.service 依赖于(Requires) bar.service
       但并未指定先后顺序, 那么这两个服务将被同时并行启动。 不过在两个单元之间既存在依赖关系也存
       在先后顺序的情形也很常见。 另外需要注意的是, 大多数依赖关系都是由 systemd 隐式创建和维护
       的, 因此没有必要额外手动创建它们。

       应用程序和单元(透过依赖关系)可能会查询其他单元的状态变化。 在 systemd 中, 这种查询被包装
       为"任务"(job)并被作为"任务队列"进行管理。 任务的执行结果可能成功也可能失败, 但是任务的执
       行顺序是依照任务所属单元之间的先后顺序确定的。

       在系统启动时,systemd 默认启动 default.target 单元, 该单元中应该包含所有你想在开机时默认
       启动的单元。 但实际上,它通常只是一个指向 graphical.target (图形界面) 或 multi-user.target
       (命令行界面,常用于嵌入式或服务器环境, 一般是 graphical.target 的一个子集)的符号连接。 详
       见 systemd.special(7) 手册。

       systemd 依赖于内核提供的 cgroups[1] 特性控制进程的派生, 从而确保可以追踪到所有子进程。
       cgroups 信息由内核负责维护, 并且可以通过 /sys/fs/cgroup/systemd/ 接口进行访问。此外,还可
       以通过 systemd-cgls(1) 或 ps(1) 之类的工具进行查看 (ps xawf -eo pid,user,cgroup,args)

       systemd 几乎完全兼容传统的 SysV init 系统: SysV init 脚本可以作为另一种配置文件格式被识
       别; 提供与 SysV 兼容的 /dev/initctl 接口; 提供各种 SysV 工具的兼容实现; 依然兼容例如
       /etc/fstab 或者 utmp 之类传统的 Unix 特性。

       systemd 还有一个小型的事务系统: 如果要启动或关闭一个单元, 那么该单元所依赖的 所有其他单
       元都会被一起加入到同一个临时事务中。 这样,就可以校验整个事务的一致性, 也就是检查是否存在
       循环依赖。 如果存在循环依赖, 那么 systemd 将会尝试通过 去掉弱依赖(want)来解决这个问题,
       如果最终实在无法解决循环依赖的问题, 那么 systemd 将会报错。

       systemd 内置了许多系统启动过程中必需的操作, 例如,设置 hostname 以及配置 loopback 网络设
       备, 以及挂载 /sys/proc 文件系统。

       在系统启动或者执行 systemctl reload ...  时, systemd 可以根据其他配置文件或者内核引导选项
       动态生成单元,参见 systemd.generator(7) 手册。

       如果要从容器中调用 systemd 那么必须遵守 Container Interface[2] 规范。 如果要从 initrd 中调
       用 systemd 那么必须遵守 initrd Interface[3] 规范。

目录

       系统单元目录
           systemd 会从多个优先级不同的系统单元目录中读取系统单元, 软件包应该将系统单元文件安装
           在 pkg-config systemd --variable=systemdsystemunitdir 命令所返回的系统单元目录中(通常
           是 /usr/lib/systemd/system)。 此外, systemd 还会读取优先级较高的
           /usr/local/lib/systemd/system 目录以及优先级较低的 /usr/lib/systemd/system 目录中的系
           统单元文件。 优先级最高的系统单元目录是 pkg-config systemd
           --variable=systemdsystemconfdir 命令所返回的目录(通常是 /etc/systemd/system)。 注
           意,软件包应该仅使用 systemctl(1) 的 enabledisable 命令修改上述目录中的内容。 完整
           的目录列表参见 systemd.unit(5) 手册。

       用户单元目录
           用户单元目录所遵守的规则与系统单元目录类似, 软件包应该将用户单元文件安装在 pkg-config
           systemd --variable=systemduserunitdir 命令所返回的用户单元目录中(通常
           是/usr/lib/systemd/user)。 此外,因为用户单元目录还遵守 XDG Base Directory
           specification[4] 规范, 所以 systemd 还会读取 $XDG_DATA_HOME/systemd/user(仅在已设置
           $XDG_DATA_HOME 的情况下) 或 ~/.local/share/systemd/user(仅在未设置 $XDG_DATA_HOME 的情
           况下) 目录中的用户单元。 全局用户单元目录(针对所有用户)是 pkg-config systemd
           --variable=systemduserconfdir 命令所返回的目录(通常是/etc/systemd/user)。 注意,软件包
           应该仅使用 systemctl(1) 的 enabledisable 命令修改上述目录中的内容。 无论这种修改是
           全局的(针对所有用户)、还是私有的(针对单个用户)。 完整的目录列表参见 systemd.unit(5) 手
           册。

       SysV启动脚本目录(不同发行版之间差别可能很大)
           如果 systemd 找不到指定服务所对应的单元文件, 那么就会到SysV启动脚本目录中 去寻找同名
           脚本(去掉 .service 后缀)。

       SysV运行级目录(不同发行版之间差别可能很大)
           systemd 在决定是否启用一个服务的时候, 会参照SysV运行级目录对该服务的设置。 注意, 这
           个规则不适用于那些已经拥有原生单元文件的服务。

信号

       SIGTERM
           systemd 系统实例将会保存其当前状态, 然后重新执行它自身,再恢复到先前保存的状态。 基本
           上相当于执行 systemctl daemon-reexec 命令。

           systemd 用户实例将会启动 exit.target 单元。 基本上相当于执行 systemctl --user start
           exit.target 命令。

       SIGINT
           systemd 系统实例将会启动 ctrl-alt-del.target 单元。 基本上相当于执行 systemctl start
           ctl-alt-del.target 命令。 在控制台上按 Ctrl-Alt-Del 组合键即可触发这个信号。 但是,如
           果在2秒内连续收到超过7次这个信号,那么将会不顾一切的立即强制重启。 因此,如果系统在重
           启过程中僵死, 那么可以通过快速连按7次 Ctrl-Alt-Del 组合键来强制立即重启。

           systemd 用户实例处理此信号的方式与 SIGTERM 相同。

       SIGWINCH
           systemd 系统实例将会启动 kbrequest.target 单元。 基本上相当于执行 systemctl start
           kbrequest.target 命令。

           systemd 用户实例将会完全忽略此信号。

       SIGPWR
           systemd 将会启动 sigpwr.target 单元。 基本上相当于执行 systemctl start sigpwr.target
           命令。

       SIGUSR1
           systemd 将会尝试重新连接到 D-Bus 总线。

       SIGUSR2
           systemd 将会以人类易读的格式将其完整的状态记录到日志中。 日期的格式与 systemd-analyze
           dump 的输出格式相同。

       SIGHUP
           重新加载守护进程的配置文件。 基本上相当于执行 systemctl daemon-reload 命令。

       SIGRTMIN+0
           进入默认模式,启动 default.target 单元。 基本上相当于执行 systemctl start
           default.target 命令。

       SIGRTMIN+1
           进入救援模式,启动 rescue.target 单元。 基本上相当于执行 systemctl isolate
           rescue.target 命令。

       SIGRTMIN+2
           进入紧急维修模式,启动 emergency.target 单元。 基本上相当于执行 systemctl isolate
           emergency.target 命令。

       SIGRTMIN+3
           关闭系统,启动 halt.target 单元。 基本上相当于执行 systemctl start halt.target 命令。

       SIGRTMIN+4
           关闭系统并切断电源,启动 poweroff.target 单元。 基本上相当于执行 systemctl start
           poweroff.target 命令。

       SIGRTMIN+5
           重新启动,启动 reboot.target 单元。 基本上相当于执行 systemctl start reboot.target 命
           令。

       SIGRTMIN+6
           通过内核的 kexec 接口重新启动,启动 kexec.target 单元。 基本上相当于执行 systemctl
           start kexec.target 命令。

       SIGRTMIN+13
           立即关闭机器

       SIGRTMIN+14
           立即关闭机器并切断电源

       SIGRTMIN+15
           立即重新启动

       SIGRTMIN+16
           立即通过内核的 kexec 接口重新启动

       SIGRTMIN+20
           在控制台上显示状态消息。 相当于使用 systemd.show_status=1 内核引导选项。

       SIGRTMIN+21
           禁止在控制台上显示状态消息。 相当于使用 systemd.show_status=0 内核引导选项。

       SIGRTMIN+22, SIGRTMIN+23
           将日志等级设为 "debug"(22) 或 "info"(23)。 相当于使用 systemd.log_level=debugsystemd.log_level=info 内核引导选项。

       SIGRTMIN+24
           立即退出 systemd 用户实例(也就是仅对 --user 实例有效)。

       SIGRTMIN+26, SIGRTMIN+27, SIGRTMIN+28
           将日志等级设为 "journal-or-kmsg"(26) 或 "console"(27) 或 "kmsg"(28)。 相当于使用
           systemd.log_target=journal-or-kmsgsystemd.log_target=consolesystemd.log_target=kmsg 内核引导选项。

环境变量

       $SYSTEMD_LOG_LEVEL
           systemd 日志等级。 可以被 --log-level= 选项覆盖。

       $SYSTEMD_LOG_TARGET
           systemd 日志目标。 可以被 --log-target= 选项覆盖。

       $SYSTEMD_LOG_COLOR
           systemd 是否应该高亮重要的日志信息。 可以被 --log-color= 选项覆盖。

       $SYSTEMD_LOG_LOCATION
           systemd 是否应该在日志信息中包含代码位置(code location)。 可以被 --log-location= 选项
           覆盖。

       $XDG_CONFIG_HOME, $XDG_DATA_HOME
           systemd 用户实例根据 XDG Base Directory specification[4] 规范使用这些变量加载单元文件
           及其 .{d,wants,requires}/ 目录。

       $SYSTEMD_UNIT_PATH
           单元目录

       $SYSTEMD_SYSVINIT_PATH
           SysV启动脚本目录

       $SYSTEMD_SYSVRCND_PATH
           SysV运行级目录

       $SYSTEMD_COLORS
           控制输出内容的色彩方案

       $LISTEN_PID, $LISTEN_FDS, $LISTEN_FDNAMES
           在基于套接字启动的过程中由 systemd 设置此变量, 以供管理程序使用。详见
           sd_listen_fds(3) 手册。

       $NOTIFY_SOCKET
           由 systemd 设置此变量, 以报告状态以及提供启动完毕的通知,以供管理程序使用。详见
           sd_notify(3) 手册。

内核引导选项

       当作为系统实例运行的时候, systemd 能够接受下面列出的内核引导选项。[5]

       systemd.unit=, rd.systemd.unit=
           设置默认启动的单元。 默认值是 default.target 。 可用于临时修改启动目标(例如
           rescue.target 或 emergency.target )。详情参见 systemd.special(7) 手册。 有 "rd."  前缀
           的参数专用于 initrd(initial RAM disk) 环境, 而无前缀的参数则用于常规环境。

       systemd.dump_core=
           如果设为默认值 yes ,那么 systemd(PID=1) 将会在崩溃时进行核心转储, 否则不进行任何转
           储。

       systemd.crash_chvt=
           可以设为一个 1-63 之间的整数或布尔值。 若设为整数则 systemd(PID=1) 将在崩溃时切换到指
           定编号的虚拟控制台; 若设为 yes , 则表示切换到内核消息所使用的虚拟控制台; 若设为
           no(默认值) 则不切换到任何虚拟控制台。

       systemd.crash_shell=
           如果设为 yes , 那么 systemd(PID=1) 将在崩溃10秒后启动一个 shell , 默认值 no 则表示即
           使崩溃也不启动任何 shell 。 由于被启动的 shell 不需要任何密码认证, 所以使用这个特性时
           需要注意其带来的安全隐患。

       systemd.crash_reboot=
           如果设为 yes, 那么 systemd(PID=1) 将在崩溃10秒后自动重启整个机器, 默认值 no 则表示即
           使崩溃也不重启(无限制的死在那里), 这样可以避免进入循环重启。 如果与
           systemd.crash_shell=yes 同时使用, 那么系统将在退出 shell 之后重启。

       systemd.confirm_spawn=
           设为 yes 表示 systemd(PID=1) 在派生新进程时进行确认提示。 默认值 no 表示不提示。

       systemd.show_status=
           启动时是否在控制台上显示简明的服务状态。 可以接受 yes(显示), no(不显示), auto(自动)三
           个值。 autono 相似, 不同之处在于当某个服务启动失败或者启动耗时太长时,将会显示其
           状态。 当使用了 quiet 内核引导选项的时候, 默认值是 auto , 否则默认值是 yessystemd.log_target=, systemd.log_level=, systemd.log_color=, systemd.log_location=
           用于控制日志输出,含义与之前的 $SYSTEMD_LOG_TARGET, $SYSTEMD_LOG_LEVEL,
           $SYSTEMD_LOG_COLOR, $SYSTEMD_LOG_LOCATION 环境变量相同。

       systemd.default_standard_output=, systemd.default_standard_error=
           设置服务的默认标准输出与标准错误, 含义与相应的 --default-standard-output=--default-standard-error= 命令行选项相同。

       systemd.setenv=
           接受"VARIABLE=VALUE"格式的字符串, 可用于为派生的子进程设置默认环境变量。 可以多次使用
           以设置多个变量。

       systemd.machine_id=
           接受一个32字符表示的16进制值, 用作该主机的 machine-id 。 主要用于网络启动,以确保每次
           启动都能得到相同的 machine-id 值。

       quiet
           关闭启动过程中的状态输出。相当于 systemd.show_status=no 的效果。 注意,因为此选项也同
           样被内核所识别, 并用于禁止输出内核日志, 所以使用此选项会导致同时关闭内核与 systemd
           的输出。

       debug
           开启调试输出, 等价于设置了 systemd.log_level=debug 。 注意,因为此选项也同样被内核所
           识别, 并用于开启内核的调试输出, 所以使用此选项会导致同时开启内核与 systemd 的调试输
           出。

       emergency, rd.emergency, -b
           启动到紧急维修模式。等价于设置了 systemd.unit=emergency.targetrd.systemd.unit=emergency.target

       rescue, rd.rescue, single, s, S, 1
           启动到救援模式。等价于设置了 systemd.unit=rescue.targetrd.systemd.unit=rescue.target

       2, 3, 4, 5
           启动到对应的 SysV 运行级。 等价于设置了对应的 systemd.unit=runlevel2.target,
           systemd.unit=runlevel3.target, systemd.unit=runlevel4.target,
           systemd.unit=runlevel5.target,

       locale.LANG=, locale.LANGUAGE=, locale.LC_CTYPE=, locale.LC_NUMERIC=, locale.LC_TIME=,
       locale.LC_COLLATE=, locale.LC_MONETARY=, locale.LC_MESSAGES=, locale.LC_PAPER=,
       locale.LC_NAME=, locale.LC_ADDRESS=, locale.LC_TELEPHONE=, locale.LC_MEASUREMENT=,
       locale.LC_IDENTIFICATION=
           设置相应的系统 locale , 会覆盖 /etc/locale.conf 中的设置。 参见 locale.conf(5) 与
           locale(7) 手册。

       更多内核引导选项的解释, 参见 kernel-command-line(7) 手册。

SOCKETS FIFOS

       /run/systemd/notify
           通知守护进程状态的 UNIX socket 文件, 用于实现 sd_notify(3) 中实现的守护进程通知逻辑。

       /run/systemd/private
           仅被 systemctl(1) 工具内部用于与 systemd 进程通信的 UNIX socket 文件。 其他进程不应该
           使用它。

       /dev/initctl
           由 systemd-initctl.service 单元提供的与传统 SysV 兼容的客户端接口(FIFO)。 这是一个即将
           被废弃的接口,尽量不要使用它。

参见

       systemd Homepage[6], systemd-system.conf(5), locale.conf(5), systemctl(1), journalctl(1),
       systemd-notify(1), daemon(7), sd-daemon(3), systemd.unit(5), systemd.special(5), pkg-
       config(1), kernel-command-line(7), bootup(7), systemd.directives(7)

NOTES

        1. cgroups
           https://www.kernel.org/doc/Documentation/cgroups/cgroups.txt

        2. Container Interface
           http://www.freedesktop.org/wiki/Software/systemd/ContainerInterface

        3. initrd Interface
           http://www.freedesktop.org/wiki/Software/systemd/InitrdInterface

        4. XDG Base Directory specification
           http://standards.freedesktop.org/basedir-spec/basedir-spec-latest.html

        5. 当 systemd 在 Linux 容器中运行的时候, 这些参数可以直接在 systemd 命令行上传递(放置在
           所有命令行选项之后), 当 systemd 不在 Linux 容器中运行的时候, 这些参数将从
           /proc/cmdline 中获取。

        6. systemd Homepage
           http://www.freedesktop.org/wiki/Software/systemd/

       本页面中文版由中文 man 手册页计划提供。

       翻译人员:金步国
       金步国作品集:http://www.jinbuguo.com
       中文 man 手册页计划:https://github.com/man-pages-zh/manpages-zh