system.conf linux用于启动和管理系统进程的初始化系统和服务管理器的配置文件
一. 概述:这是什么文件?
这个文件是 systemd
的主配置文件。systemd
是现代 Linux 发行版(包括 Ubuntu)中用于启动和管理系统进程的初始化系统和服务管理器。你可以把它看作是系统的“大管家”(PID 1),它负责启动所有其他程序,并监控它们的状态。
system.conf
文件中的配置项定义了 systemd
管理器自身的行为,以及所有由它管理的服务(services)、挂载点(mounts)、套接字(sockets)等的全局默认值。
二. 重要概念(来自文件头部的注释)
在深入每个配置项之前,我们先理解文件头部注释传达的关键信息:
- 显示的是编译时默认值:文件中大多数被
#
注释掉的行,展示的是systemd
在编译时设定的默认值。你的系统当前就是按照这些默认值在运行。 - 如何修改配置:
- 不推荐直接修改
/etc/systemd/system.conf
这个文件。因为系统更新时,这个文件可能会被覆盖,导致你的修改丢失。 - 推荐的方法是在
/etc/systemd/system.conf.d/
目录下创建新的.conf
文件(例如my-overrides.conf
)。systemd
会读取system.conf
,然后再读取.conf.d
目录下的所有文件(按字母顺序),后读取的配置会覆盖之前的。这使得你的自定义配置与系统默认配置分离,便于管理和升级。 - 但是我现在其实是用的不推荐的方法,最后按照下面的命令打印一下看一下配置生效了就成。
- 不推荐直接修改
- 如何查看最终生效的配置:使用命令
systemd-analyze cat-config systemd/system.conf
可以看到合并了所有drop-in
文件后,最终生效的完整配置。 - 权威文档:最详细的解释总是在
man
手册里,可以通过man systemd-system.conf
命令查看。
三. system.conf
文件的主要内容
[Manager]
#LogLevel=info
#LogTarget=journal-or-kmsg
#LogColor=yes
#LogLocation=no
#LogTime=no
#DumpCore=yes
#ShowStatus=yes
#CrashChangeVT=no
#CrashShell=no
#CrashReboot=no
#CtrlAltDelBurstAction=reboot-force
#CPUAffinity=
#NUMAPolicy=default
#NUMAMask=
#RuntimeWatchdogSec=0
#RebootWatchdogSec=10min
#KExecWatchdogSec=0
#WatchdogDevice=
#CapabilityBoundingSet=
#NoNewPrivileges=no
#SystemCallArchitectures=
#TimerSlackNSec=
#StatusUnitFormat=description
#DefaultTimerAccuracySec=1min
#DefaultStandardOutput=journal
#DefaultStandardError=inherit
DefaultTimeoutStartSec=15s
DefaultTimeoutStopSec=15s
#DefaultTimeoutAbortSec=
#DefaultRestartSec=100ms
#DefaultStartLimitIntervalSec=10s
#DefaultStartLimitBurst=5
#DefaultEnvironment=
#DefaultCPUAccounting=no
#DefaultIOAccounting=no
#DefaultIPAccounting=no
#DefaultBlockIOAccounting=no
#DefaultMemoryAccounting=yes
#DefaultTasksAccounting=yes
#DefaultTasksMax=15%
#DefaultLimitCPU=
#DefaultLimitFSIZE=
#DefaultLimitDATA=
#DefaultLimitSTACK=
#DefaultLimitCORE=
#DefaultLimitRSS=
#DefaultLimitNOFILE=1024:524288
#DefaultLimitAS=
#DefaultLimitNPROC=
#DefaultLimitMEMLOCK=
#DefaultLimitLOCKS=
#DefaultLimitSIGPENDING=
#DefaultLimitMSGQUEUE=
#DefaultLimitNICE=
#DefaultLimitRTPRIO=
#DefaultLimitRTTIME=
#DefaultOOMPolicy=stop
在这里,我们来详细解析一下这个 system.conf
文件。
[Manager]
配置项详解
这个文件只有一个配置段 [Manager]
,下面我们逐一解释其中的配置项。
日志与状态 (Logging & Status)
-
#LogLevel=info
- 作用:设置
systemd
管理器自身的日志级别。 - 可选值:
debug
,info
,notice
,warning
,err
,crit
,alert
,emerg
。info
是一个比较均衡的级别,记录常规信息和错误。如果系统出现疑难杂症,可以临时设置为debug
以获取更详细的日志。
- 作用:设置
-
#LogTarget=journal-or-kmsg
- 作用:设置日志输出的目标。
- 默认值含义:优先输出到
systemd-journald
(journal
),如果journald
不可用,则输出到内核日志缓冲区(kmsg
)。其他可选值还有console
,syslog
等。
-
#LogColor=yes
- 作用:在支持的终端上,为日志输出添加颜色,以区分日志级别(如错误用红色,警告用黄色)。
-
#LogLocation=no
- 作用:是否在日志中包含代码文件的位置信息(文件名和行号)。开启此项主要用于开发和调试
systemd
本身。
- 作用:是否在日志中包含代码文件的位置信息(文件名和行号)。开启此项主要用于开发和调试
-
#DumpCore=yes
- 作用:当一个进程崩溃时,
systemd
是否为其生成一个core dump
文件。core dump
是进程崩溃时内存状态的快照,对于调试程序崩溃原因至关重要。
- 作用:当一个进程崩溃时,
-
#ShowStatus=yes
- 作用:在系统启动和关闭过程中,是否显示服务的状态更新信息。设置为
no
会让启动过程看起来更“安静”。
- 作用:在系统启动和关闭过程中,是否显示服务的状态更新信息。设置为
系统崩溃与特殊按键处理 (Crash & Special Keys)
-
#CrashChangeVT=no
- 作用:当
systemd
自身或关键服务崩溃时,是否自动切换到一个新的虚拟终端(VT)。
- 作用:当
-
#CrashShell=no
- 作用:当系统崩溃时,是否启动一个调试用的
shell
。这是一个高级调试功能。
- 作用:当系统崩溃时,是否启动一个调试用的
-
#CrashReboot=no
- 作用:当系统崩溃时,是否自动重启系统。
-
#CtrlAltDelBurstAction=reboot-force
- 作用:定义当用户快速、连续地按下
Ctrl+Alt+Delete
组合键时(7次/2秒内)系统的行为。 - 默认值含义:
reboot-force
表示强制重启,不经过正常关闭流程,类似于按硬件重启按钮。其他选项有poweroff-force
(强制关机) 等。
- 作用:定义当用户快速、连续地按下
性能与调度 (Performance & Scheduling)
-
#CPUAffinity=
- 作用:将
systemd
管理器进程(PID 1)以及由它派生的子进程(默认情况下)绑定到指定的 CPU 核心上。例如CPUAffinity=0 1
表示绑定到 CPU 0 和 CPU 1。
- 作用:将
-
#RuntimeWatchdogSec=0
和#RebootWatchdogSec=10min
- 作用:配置硬件看门狗(Watchdog)。看门狗是一个硬件计时器,如果系统在规定时间内没有“喂狗”(重置计时器),看门狗就会强制重启系统。
RuntimeWatchdogSec
:systemd
“喂狗”的间隔。0
表示禁用。RebootWatchdogSec
:在正常关机过程中,允许系统完成关机操作的最大时间。超过这个时间,看门狗会强制重启。
服务的全局默认值 (Defaults for all Units)
这部分是最重要的,它为系统上所有 *.service
文件设置了默认行为,除非服务文件自己覆盖了这些设置。
超时与重启 (Timeouts & Restart)
-
DefaultTimeoutStartSec=15s
-
DefaultTimeoutStopSec=15s
- 作用:这两项在你的配置文件中是生效的(没有被注释掉)。它们定义了启动和停止一个服务的默认超时时间。
DefaultTimeoutStartSec=15s
:如果一个服务在启动后 15 秒内没有报告“启动成功”,systemd
会认为它启动失败。DefaultTimeoutStopSec=15s
:如果一个服务在收到停止信号后 15 秒内没有完全退出,systemd
会强制杀死它(SIGKILL)。
-
#DefaultRestartSec=100ms
- 作用:如果一个服务被配置为自动重启(
Restart=
选项),在尝试重启之前,systemd
会等待这里设定的时间。
- 作用:如果一个服务被配置为自动重启(
启动频率限制 (Start Limits)
#DefaultStartLimitIntervalSec=10s
#DefaultStartLimitBurst=5
- 作用:这是一组防止服务因反复失败而无限重启的保护机制。
- 含义:在
10
秒(IntervalSec
)内,一个服务最多允许启动5
次(Burst
)。如果超过这个频率,systemd
会停止尝试重启该服务,并将其标记为失败状态。
环境与I/O (Environment & I/O)
-
#DefaultStandardOutput=journal
- 作用:所有服务的标准输出(STDOUT)默认重定向到哪里。
journal
表示发送给systemd-journald
。
- 作用:所有服务的标准输出(STDOUT)默认重定向到哪里。
-
#DefaultStandardError=inherit
- 作用:所有服务的标准错误(STDERR)默认重定向到哪里。
inherit
表示使用与标准输出相同的设置。
- 作用:所有服务的标准错误(STDERR)默认重定向到哪里。
资源统计 (Resource Accounting)
这些选项控制 systemd
是否为每个服务启用资源使用情况的统计。开启后,你可以通过 systemd-cgtop
或 systemctl status <service>
查看每个服务消耗的资源。
#DefaultCPUAccounting=no
:统计 CPU 时间。#DefaultIOAccounting=no
:统计块设备 I/O。#DefaultIPAccounting=no
:统计网络流量。#DefaultMemoryAccounting=yes
:(默认开启) 统计内存使用量。#DefaultTasksAccounting=yes
:(默认开启) 统计任务(线程/进程)数量。
资源限制 (Resource Limits - cgroups/ulimit)
这些选项为所有服务设置了默认的资源限制,功能类似于 shell 中的 ulimit
命令,底层通过 cgroups 实现。
-
#DefaultTasksMax=15%
- 作用:一个服务默认可以创建的最大任务数(进程+线程)。可以是绝对数值,也可以是系统总任务数上限的百分比。
15%
是一个相当宽松的默认值。
- 作用:一个服务默认可以创建的最大任务数(进程+线程)。可以是绝对数值,也可以是系统总任务数上限的百分比。
-
#DefaultLimitNOFILE=1024:524288
- 作用:设置默认的最大打开文件句柄数。
- 格式:
软限制:硬限制
。- 软限制 (Soft Limit):普通程序看到的限制,可以由程序自己调高,但不能超过硬限制。
- 硬限制 (Hard Limit):由特权进程(如 root)设定的绝对上限。
- 这个设置对于数据库、Web 服务器等需要处理大量并发连接的应用非常重要。
-
其他
DefaultLimit...
:如DefaultLimitCPU
(CPU时间),DefaultLimitFSIZE
(文件大小),DefaultLimitDATA
(数据段大小),DefaultLimitSTACK
(栈大小),DefaultLimitCORE
(Core dump 文件大小),DefaultLimitNPROC
(进程数) 等,都是对不同系统资源的默认限制。 -
#DefaultOOMPolicy=stop
- 作用:当服务所在的 cgroup 发生内存不足(Out-Of-Memory)时,系统应该如何处理。
stop
(默认): 内核的 OOM killer 会杀死该服务内的进程,并且systemd
会干净地停止该服务。kill
: 内核直接杀死进程,但systemd
不会改变服务的状态,可能会导致服务进入一个不一致的状态。
总结
system.conf
是 systemd
的大脑中枢配置文件,它掌管着 systemd
自身的行为和所有系统服务的全局默认设置。
- 你提供的文件显示了大部分
systemd
的编译时默认值,这些值在你的系统上正在默默工作。 - 唯一生效的自定义配置是
DefaultTimeoutStartSec=15s
和DefaultTimeoutStopSec=15s
,这可能是发行版(Ubuntu)为了更快的启动/关闭体验而设置的。 - 如果你需要调整任何全局设置(例如,为所有服务提高文件句柄数限制),最佳实践是在
/etc/systemd/system.conf.d/
目录下创建一个新文件来进行修改,而不是直接编辑主文件。