一、什么是 systemd 的“原生服务”
通常有两种理解方式:
- 理解一(最常用): 指 systemd 软件包自身携带的服务单元。这些
.service文件随 systemd 一起安装,负责系统最基础的功能,如日志、设备管理、登录管理等。 - 理解二: 指 systemd 进程直接实现的能力,如 socket 激活、timer 定时器、device 单元等,它们不需要额外的守护进程,本质是 PID 1 的功能延伸。

Pasted image 20260601101115
二、systemd 原生服务速览表
以下服务均由 systemd 软件包提供,在不同发行版中可能并非全部启用,但单元文件默认存在。
systemd-journald.service | |
systemd-logind.service | |
systemd-udevd.service | |
systemd-resolved.service | |
systemd-networkd.service | |
systemd-timesyncd.service | |
systemd-tmpfiles-setup.service | |
systemd-tmpfiles-clean.service | |
systemd-random-seed.service | |
systemd-modules-load.service | |
systemd-sysusers.service | |
systemd-sysctl.service | |
systemd-binfmt.service | |
systemd-machine-id-commit.service | |
systemd-hwdb-update.service | |
systemd-fsck@.service | |
systemd-quotacheck.service | |
systemd-vconsole-setup.service | |
systemd-hostnamed.service | |
systemd-localed.service | |
systemd-timedated.service | |
systemd-portabled.service | |
systemd-userdbd.service |
另外 systemd 还包含大量
.target、.socket、.timer、.device等原生单元,如basic.target、syslog.socket,它们同样属于 systemd 项目本身。
三、如何确认一个服务是不是原生
使用包管理器查询该 .service 文件所属的软件包:
# Fedora / RHEL / CentOSrpm -qf /usr/lib/systemd/system/systemd-journald.service# Debian / Ubuntudpkg -S /lib/systemd/system/systemd-journald.service如果输出是 systemd 这个包,那它就是原生服务;如果是 nginx、docker 等,则为第三方服务。
四、各原生服务详细说明与注意事项
下面对每一个服务逐一介绍其用途及在生产/日常使用中需要留意的要点。
1. systemd-journald.service
- 介绍: 系统日志守护进程,收集内核、initrd、所有 systemd 服务及进程的日志。日志默认存于
/run/log/journal(内存,重启丢失),若创建/var/log/journal则变为持久化。 - 注意:
- 绝对不要禁用,否则所有日志丢失,故障排查极其困难。
配置文件 /etc/systemd/journald.conf,务必关注SystemMaxUse、MaxFileSec等限制,防止 /var 被写满。持久化日志需手动创建目录并保持权限。
2. systemd-logind.service
- 介绍: 管理用户登录、会话、席位(seat),负责在用户切换时分配设备权限,并参与关机/重启流程,是图形界面和多用户控制台的基础。
- 注意:
- 切勿禁用,否则无法正常登录,无论控制台还是图形界面。
- /etc/systemd/logind.conf 可配置空闲超时注销(
StopIdleSessionSec)、电源键行为( HandlePowerKey)等。 在极简容器或精简系统中可能被省略,会导致 su等命令异常。
3. systemd-udevd.service
- 介绍: 设备管理器,监听内核 uevent,动态创建/删除
/dev下设备节点,加载驱动并应用自定义 udev 规则。 - 注意:
禁用后无法识别新插入的硬件,设备节点缺失。 自定义规则放入 /etc/udev/rules.d/,修改后需执行udevadm control --reload及udevadm trigger。调试设备问题可用 udevadm monitor实时查看事件。
4. systemd-resolved.service
- 介绍: 提供本地 DNS 存根(127.0.0.53)、LLMNR、mDNS 及 DNSSEC 验证。常用作统一的名称解析接口。
- 注意:
- 与 dnsmasq 等其他 DNS 解析器存在端口冲突(53),不可同时监听。
若启用 resolved,建议由它接管 /etc/resolv.conf(符号链接到其存根文件)。桌面环境常配合 NetworkManager 使用,服务器环境可按需启用。
5. systemd-networkd.service
- 介绍: 网络配置管理,尤其适合服务器或有线网络的简单管理。通过
.network和.link文件配置接口。 - 注意:
- 与 NetworkManager 是竞争关系,不可同时管理同一接口。桌面用 NetworkManager,服务器可考虑 networkd。
配置文件位于 /etc/systemd/network/,启动前需停止并禁用其他网络管理服务。不支持 PPP、高级 Wi-Fi 等功能,只适合作基本的 IP 配置。
6. systemd-timesyncd.service
- 介绍: 极简的 SNTP 客户端,从远程 NTP 服务器获取时间并同步本地时钟,适合不需要高精度时间服务的环境。
- 注意:
- 不能与 ntpd 或 chrony 同时运行,执行
timedatectl set-ntp true会自动启用 timesyncd(前提是其他 NTP 服务已禁用)。 配置在 /etc/systemd/timesyncd.conf,可指定 NTP 服务器。仅作客户端,不对外提供时间服务。
7. systemd-tmpfiles-setup.service
- 介绍: 启动时一次性读取
/usr/lib/tmpfiles.d/*.conf和/etc/tmpfiles.d/*.conf,创建目录、文件、管道,并设置权限和属性。 - 注意:
- 开机必需,禁用可能导致
/run、 /tmp下关键目录缺失,引起服务启动失败。 手动测试配置语法可用 systemd-tmpfiles --create。新增配置后无需重启,但需手动触发或等待下次启动。
8. systemd-tmpfiles-clean.service
- 介绍: 由
systemd-tmpfiles-clean.timer触发,每日清理/tmp、/var/tmp等目录中过期的文件。 - 注意:
可安全禁用,但 /tmp将失去自动清理,长期运行可能堆积大量临时文件。禁用时务必同时停止对应的 timer。清理年龄和范围由 tmpfiles.d 配置文件中的 age字段决定。
9. systemd-random-seed.service
- 介绍: 关机时将随机种子保存到
/var/lib/systemd/random-seed,启动时恢复,以保证系统早期就能获得足够质量的随机数。 - 注意:
不要禁用,否则早期随机数不足可能影响 SSH 密钥生成、SSL 等安全特性。 该服务执行完成后即退出,不是常驻进程。
10. systemd-modules-load.service
- 介绍: 从
/etc/modules-load.d/*.conf读取模块名,在系统启动早期加载指定内核模块。 - 注意:
禁用可能导致某些硬件或内核功能不可用(如虚拟网卡、文件系统驱动)。 加载失败不会中断启动,但会在 journal 中留下错误记录。
11. systemd-sysusers.service
- 介绍: 根据 sysusers.d 配置,在启动时创建系统用户和组,声明式管理,无需调用
useradd。 - 注意:
- 属于关键启动服务,许多系统用户(如
systemd-resolve、 systemd-timesync)依赖它创建。 配置文件位于 /usr/lib/sysusers.d/和/etc/sysusers.d/,修改后重启或手动执行systemd-sysusers生效。
12. systemd-sysctl.service
- 介绍: 在系统启动时应用
/etc/sysctl.d/*.conf中的内核参数(如网络调优、安全限制)。 - 注意:
禁用后自定义 sysctl 参数完全失效,可能影响性能或安全配置。 加载时若有参数无效会写入 journal,但不阻止启动。
13. systemd-binfmt.service
- 介绍: 注册可执行文件格式,利用内核 binfmt_misc 机制自动执行非本机二进制(如直接运行 Java .class、跨架构 qemu 程序)。
- 注意:
如需运行其他架构的程序(如 ARM 应用在 x86 上),则应启用。 通常随系统自动启动,无需额外干预。
14. systemd-machine-id-commit.service
- 介绍: 仅在
/etc/machine-id为空时,将临时 machine-id 提交写入,确保系统拥有唯一标识。 - 注意:
一次性服务,执行完即退出,通常只在初次安装或首次启动时触发。 不要手动修改或删除 /etc/machine-id,丢失后 DHCP、日志等依赖该 ID 的功能会异常。
15. systemd-hwdb-update.service
- 介绍: 将
/etc/udev/hwdb.d/等位置的硬件数据库文本文件编译成二进制索引,供 udev 和 systemd 硬件识别使用。 - 注意:
一般仅在硬件数据库更新或系统首次启动后运行一次。 可以禁用,但设备可能缺失友好名称或属性。
16. systemd-fsck@.service
- 介绍: 模板服务,对
/etc/fstab中第6字段不为 0 的分区执行文件系统检查。 - 注意:
- 不要屏蔽模板本身,如需跳过检查,应在 fstab 中将对应分区的第6字段设为 0,或屏蔽特定实例。
若检查失败,系统会进入 emergency mode,需手动修复。
17. systemd-quotacheck.service
- 介绍: 在启动时为启用了配额(
usrquota、grpquota)的文件系统检查并更新配额文件。 - 注意:
仅在 fstab 中明确设置配额选项时才会被自动生成实例。 若使用独立的配额工具管理,可考虑禁用此服务。
18. systemd-vconsole-setup.service
- 介绍: 根据
/etc/vconsole.conf设置虚拟控制台的字体、键盘映射和颜色。 - 注意:
若键盘布局配置错误,可能导致控制台无法输入密码。务必确保配置正确。 无图形界面的系统依赖此服务提供正确的本地化控制台。
19. systemd-hostnamed.service
- 介绍: 通过 D-Bus 接口提供主机名查询和修改,
hostnamectl命令的底层依赖。 - 注意:
默认按需激活,无需手动启用或禁用。禁用后 hostnamectl set-hostname将失效。
20. systemd-localed.service
- 介绍: 通过 D-Bus 管理系统区域和语言设置,
localectl命令依赖此服务。 - 注意:
同样按需启动,禁用后 localectl无法工作。推荐使用该命令修改 locale 设置。
21. systemd-timedated.service
- 介绍: 通过 D-Bus 接口控制系统时间和时区,
timedatectl命令依赖此服务。 - 注意:
按需启动,禁用后 timedatectl相关功能失效。该服务会与 timesyncd 或 chronyd 通信以设置时间同步状态。
22. systemd-portabled.service
- 介绍: 管理可移植服务镜像,支持从磁盘映像附加、分离和运行服务,面向容器化或迁移场景。
- 注意:
- 日常桌面/服务器极少使用,可以安全禁用,除非你使用
portablectl工具。
23. systemd-userdbd.service
- 介绍: 提供基于 JSON 的用户/组记录查询接口,可通过
nss-systemd替代传统 NSS,支持更丰富的用户属性。 - 注意:
多数发行版默认未运行。若 /etc/nsswitch.conf中为passwd、group添加了systemd选项,则必须启用此服务。可用 userctl等工具进行查询和操作。
五、查看当前运行中的原生服务
执行以下命令可列出所有已激活的运行中服务,然后结合包管理器过滤出 systemd 自带的部分:
systemctl list-units --type=service --state=running以上便是 systemd 原生服务的完整汇总。绝大部分核心服务(日志、设备、登录、内核配置等)不可随意禁用,可选组件(如 timesyncd、resolved、networkd)则需根据实际环境评估是否与现有服务冲突后再决定启停。
夜雨聆风