systemd-system.conf 中文手册

译者:金步国


版权声明

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

其他作品

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

联系方式

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


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

名称

systemd-system.conf, system.conf.d, systemd-user.conf, user.conf.d — systemd 配置文件

大纲

/etc/systemd/system.conf

/etc/systemd/system.conf.d/*.conf

/run/systemd/system.conf.d/*.conf

/usr/lib/systemd/system.conf.d/*.conf

/etc/systemd/user.conf

/etc/systemd/user.conf.d/*.conf

/run/systemd/user.conf.d/*.conf

/usr/lib/systemd/user.conf.d/*.conf

描述

当作为系统实例运行时, systemd 将会按照 system.conf 配置文件 以及 system.conf.d 配置目录中的指令工作; 当作为用户实例运行时, systemd 将会按照 user.conf 配置文件 以及 user.conf.d 配置目录中的指令工作。 这些配置文件包含了控制 systemd 行为的设置。

配置目录及其优先级

默认设置是在编译期间确定的, 所以仅在确实需要修改默认设置的情况下, 才需要使用配置文件。位于 /etc/systemd/ 目录中的初始配置文件, 仅包含了展示选项默认值的注释, 目的在于方便系统管理员查看和直接修改。

如果软件包想要自定义某些默认设置, 那么必须将自定义的配置文件安装到 /usr/lib/systemd/*.conf.d/ 目录中。 /etc/ 目录仅供系统管理员使用。 系统管理员可以利用下面的逻辑来覆盖默认设置: 主配置文件最先被读取, 优先级也最低。 所有 *.conf.d/ 中的配置文件 都会覆盖主配置文件中的设置。 所有 *.conf.d/ 中的配置文件(无论位于哪个目录中), 统一按照文件名的字典顺序处理。 如果在多个配置文件中设置了同一个选项, 那么仅以文件名最靠后(字典顺序)的那一个为准。 为了便于排序, 建议给所有 *.conf.d/ 中的配置文件 都加上两位十进制数字的文件名前缀。

如果系统管理员想要屏蔽 /usr/lib/ 目录中的某个配置文件, 那么最佳做法是在 /etc/ 目录中 创建一个指向 /dev/null 的同名符号链接, 即可彻底屏蔽 /usr/lib/ 目录中的同名文件。

选项

所有选项都位于 "[Manager]" 小节中

LogLevel=, LogTarget=, LogColor=, LogLocation=, DumpCore=yes, CrashChangeVT=no, CrashShell=no, CrashReboot=no, ShowStatus=yes, DefaultStandardOutput=journal, DefaultStandardError=inherit

设置一些 systemd 命令行选项的默认值。 配置文件中的设置会被命令行上的设置覆盖。 详见 systemd(1) 手册。

CPUAffinity=

设置 init 进程的初始CPU亲和性。 值是一个空格或逗号分隔的CPU编号与CPU范围的列表。 所谓"CPU范围"是指用CPU编号表示的一段范围内的CPU, 格式是"编号下限-编号上限"。

JoinControllers=cpu,cpuacct net_cls,netprio

systemd 默认将所有内核中的控制器分别挂载到各自独有的层级上, 但是在该选项中列出的控制器则会被挂载到同一个层级上。 选项值是一个空格分隔的列表, 列表中的每一项则又是一个逗号分隔的控制器名称列表, 以允许将多个层级连接在一起。 该选项的默认值是"cpu,cpuacct"。若设为空, 则可确保 systemd 将所有控制器挂载到各自独立的层级上。

注意,此选项仅在系统启动的早期应用一次。 因此, 如果你在 initrd 中使用了 systemd , 那么若要修改此选项, 则必须在修改完配置文件之后, 重新生成 initrd 。

RuntimeWatchdogSec=, ShutdownWatchdogSec=

分别配置硬件看门狗的运行时超时阈值与重启超时阈值。 若仅设置一个整数而没有单位,那么单位是秒。 同时也可以在整数后面加上时间单位后缀: "ms"(毫秒), "s"(秒), "min"(分钟), "h"(小时), "d"(天), "w"(周)。 如果将 RuntimeWatchdogSec= 设为非零值, 那么 systemd 会尽力以该值的一半时长为间隔不断喂狗, 当看门狗硬件(/dev/watchdog)的饥饿时间超过该选项设置的阈值时, 看门狗硬件将会重启系统。 某些看门狗硬件不支持随意设置这个值, 在这种情况下,将会自动使用最接近的有效阈值。 ShutdownWatchdogSec= 可用于设置重启超时阈值。 其含义是, 当 systemd 在正常重启过程中遭遇故障, 无法在 ShutdownWatchdogSec= 规定的时间内完成重启时, 将由看门狗硬件强制重启整个机器。 RuntimeWatchdogSec= 的默认值是"0"(关闭看门狗); 而 ShutdownWatchdogSec= 的默认值是 10min (10分钟)。 这些设置仅在确实存在看门狗硬件(它们通常都集成在服务器主板上)时有意义, 否则没有任何作用。

CapabilityBoundingSet=

设置 systemd(PID=1) 及其子进程的 capabilities 集合 (bounding, effective, permitted, inheritable)中应该包含哪些 capabilities 。 选项值是一个空格分隔的、可被 cap_from_name(3) 读取的 capability 名称列表,详见 capabilities(7) 手册。 列表中的 capabilities 将会被包含在 capability 集合中, 而所有其他不在列表中的 capabilities 则会被剔除。 如果列表以"~"符号开头,那么表示取反, 也就是所有列表之外的 capabilities 将会被包含在 capability 集合中。 也可以在每个单元文件中, 使用这个选项针对每个单元文件单独设置专用于该单元的 capability 集合。 但是, 那些已经被 systemd(PID=1) 排除的 capabilities 是永久性的排除, 也就是无法再被加入到单元的 capability 集合中去。

SystemCallArchitectures=

设置可使用哪些体系结构的系统调用, 选项值是一个空格分隔的体系结构标识符列表。 可以使用的标识符有: "x86", "x86-64", "x32", "arm", "native"(编译 systemd 时的目标架构)。 该选项的默认值为空, 表示不作任何限制。 该选项可用于在全系统范围内 强制仅允许执行特定体系结构的二进制程序。 比如禁止在 x86-64 机器上执行32位的 x86 二进制程序。 当某个二进制程序企图执行列表范围之外的系统调用时, 它将会立即被 SIGSYS 信号杀死。 该选项在全系统范围有效, 相当于单元文件中的 SystemCallArchitectures= 选项(参见 systemd.exec(5)) 的全局版本。

TimerSlackNSec=

设置 systemd(PID=1) 的定时器粒度。 若仅设置一个整数而没有单位,那么单位是纳秒。 也可以在整数后面加上时间单位后缀: "ns"(纳秒), "us"(微秒), "ms"(毫秒), "s"(秒), "min"(分钟), "h"(小时), "d"(天), "w"(周) 。 该值会被所有子进程继承, 但可以被单元文件中的 TimerSlackNSec= 选项(参见 systemd.exec(5)) 针对特定单元改写。 定时器的粒度大小控制着进程被操作系统定时器唤醒的时间精度, 详见 prctl(2) 手册。

DefaultTimerAccuracySec=

设置定时器单元的默认精度, 也就是 timer 单元文件中 AccuracySec= 选项的默认值 (参见 systemd.timer(5))。 默认值是 1min(1分钟)。 在 timer 单元文件中明确设置的 AccuracySec= 值会覆盖此处的设置。 若仅设置一个整数而没有单位,那么单位是秒。 也可以在整数后面加上时间单位后缀:"ms"(毫秒), "s"(秒), "min"(分钟), "h"(小时), "d"(天), "w"(周) 。 注意,实际能够达到的精度受 TimerSlackNSec= 选项的制约(可以理解为最小时间片)。

DefaultTimeoutStartSec=, DefaultTimeoutStopSec=, DefaultRestartSec=

设置启动/停止一个单元所允许的最大时长, 以及在重启一个单元时,停止与启动之间的间隔时长。 若仅设置一个整数而没有单位,那么单位是秒。 也可以在整数后面加上时间单位后缀: "ms"(毫秒), "s"(秒), "min"(分钟), "h"(小时), "d"(天), "w"(周) 。 DefaultTimeoutStartSec=DefaultTimeoutStopSec= 的默认值都是 90s , 而 DefaultRestartSec= 的默认值是 100ms 。 对于 service 单元,可以在单元文件中设置 TimeoutStartSec=, TimeoutStopSec=, RestartSec= 以覆盖此处设置的默认值 (参见 systemd.service(5))。 对于其他类型的单元, DefaultTimeoutStartSec=TimeoutSec= 的默认值。

DefaultStartLimitIntervalSec=, DefaultStartLimitBurst=

设置默认的单元启动频率限制, 相当于设置单元文件中 StartLimitIntervalSec=, StartLimitBurst= 的默认值 (参见systemd.service(5))。 默认值如下: DefaultStartLimitIntervalSec=10s, DefaultStartLimitBurst=5

DefaultEnvironment=

设置需要传递给所有子进程的环境变量, 值是一个空格分隔的 VAR=VALUE 列表。 参见 environ(7) 手册。

例如:

DefaultEnvironment="VAR1=word1 word2" VAR2=word3 "VAR3=word 5 6"

设置了 "VAR1", "VAR2", "VAR3" 三个变量, 其值分别是 "word1 word2", "word3", "word 5 6" 。

DefaultCPUAccounting=, DefaultBlockIOAccounting=, DefaultMemoryAccounting=, DefaultTasksAccounting=

设置每个单元默认的资源统计开关。 相当于设置单元文件中 CPUAccounting=, BlockIOAccounting=, MemoryAccounting=, TasksAccounting= 的默认值(参见 systemd.resource-control(5))。 只有 DefaulTasksAccounting= 的默认值是"yes", 其他三项的默认值都是"no"

DefaultTasksMax=

设置每个单元默认的最大任务数量,相当于设置每个单元的 TasksMax= 默认值(参见 systemd.resource-control(5))。 作用于所有支持资源限制的单元类型(但 slice 单元除外)。 默认值是 15% ,对于默认设置的内核来说,在主机上等于 4915 , 但在容器中的值可能会更小。

DefaultLimitCPU=, DefaultLimitFSIZE=, DefaultLimitDATA=, DefaultLimitSTACK=, DefaultLimitCORE=, DefaultLimitRSS=, DefaultLimitNOFILE=, DefaultLimitAS=, DefaultLimitNPROC=, DefaultLimitMEMLOCK=, DefaultLimitLOCKS=, DefaultLimitSIGPENDING=, DefaultLimitMSGQUEUE=, DefaultLimitNICE=, DefaultLimitRTPRIO=, DefaultLimitRTTIME=

设置默认的单元资源限制(详见 setrlimit(2))。 相当于设置单元文件中 LimitXXX= 指令的默认值。 这些指令的值有两种表示法, 一个单独的 value 值表示将软硬两种限制设为同一个值。 而冒号分隔的 soft:hard 值表示分别设置软限制与硬限制(例如 DefaultLimitAS=4G:16G)。 特殊值 infinity 表示没有限制。 对于以字节为单位的选项, 可以使用以1024为基数的 K, M, G, T, P, E 后缀(例如 DefaultLimitAS=16G)。 对于时间限制,可以加上 "ms"(毫秒), "s"(秒), "min"(分钟), "h"(小时), "d"(天), "w"(周) 等明确的时间单位后缀 (systemd.time(7))。 如果仅设置了一个整数而没有单位, 那么对于 DefaultLimitCPU= 来说默认单位是秒。 而对于 DefaultLimitRTTIME= 来说默认单位是微秒(百万分之一秒)。 注意,这些资源限制值的实际效果可能会受到各自有效粒度的影响。 例如 DefaultLimitCPU= 所设置的时间会被向上取整到一秒钟的整数倍。 这些默认设置可以被单元文件中对应的 LimitXXX= 指令覆盖。 注意,这里的资源限制仅作用于单元,并不作用于 systemd(PID=1) 进程自身。

参见

systemd(1), systemd.directives(7), systemd.exec(5), systemd.service(5), environ(7), capabilities(7)