systemd - System and Service Manager
📅 2014-12-10 | 🖱️
systemd #
systemd是Linux系统的一套基础构建模块。它提供了一个系统和服务管理器,以PID 1运行并启动系统的其他部分。
systemd提供激进的并行化能力,使用套接字和D-Bus激活机制启动服务,支持按需启动守护进程,通过Linux控制组(control groups)跟踪进程,管理挂载点和自动挂载点,并通过事务性依赖关系实现复杂的服务控制逻辑。systemd支持SysV和LSB初始化脚本,可以替代传统的sysvinit。
此外,systemd包括一个日志守护进程,用于控制基本系统配置的工具(如主机名、日期、区域设置等),维护登录用户列表、运行中的容器和虚拟机、系统账户、运行时目录及其设置的工具,以及用于管理简单网络配置、网络时间同步、日志转发和名称解析的守护进程。
挂载需求 #
systemd对引导过程中Linux文件系统层次结构的不同部分提出了明确的要求,这些部分必须在特定时间点可用并完成挂载。如果这些挂载所依赖的文件系统位于外部或远程介质上,而这些介质需要特殊驱动程序、基础设施或网络支持,则这些功能必须在该时间点之前已启动并运行。
通常,这些要求分为以下三类:
- 🌥️ initrd:需要在操作系统切换到根文件系统之前完成挂载的文件系统。(即需要在 initrd 阶段完成,initrd→host 切换之前。)
- 🌤️ early:需要在早期引导过程中挂载的文件系统。这些挂载发生在 initrd→host 切换之后,但在常规服务启动之前。(即在 local-fs.target 达到之前。)
- ☀️ regular:可以在引导过程中的任何时间完成挂载的文件系统——但某些具体的服务可能要求这些挂载在服务启动时已经完成。(通常,这些挂载会安排在 remote-fs.target 之前完成。)
需要注意的是,第 3 类挂载同样可以在 initrd 阶段或早期引导过程中完成,而第 2 类挂载也可以在 initrd 阶段完成。
以下是相关挂载及其所属类别的表格:
Mount | Category |
---|---|
/ (root fs) | 1 |
/usr/ | 1 |
/etc/ | 1 |
/var/ | 2 |
/var/tmp/ | 2 |
/tmp/ | 2 |
/home/ | 3 |
/srv/ | 3 |
XBOOTLDR | 3 |
ESP | 3 |
换句话说,根文件系统(显然是必需的)、/usr/ 和 /etc/(如果被拆分)必须在 initrd 过渡到主机时完成挂载。随后,/var/(包含 /var/tmp/)和 /tmp/(如果被拆分)必须在主机进入 local-fs.target(然后是 basic.target)之前完成挂载。其余的挂载可以在此之后逐步建立。
如果像 /var/ 这样的挂载在早期引导阶段(或 initrd 阶段)未完成,并且依赖于某些后期启动的服务(如网络管理器实现)才能运行,这可能引发循环排序依赖,从而导致启动失败。
如果计划将网络支持的挂载(如 NFS、SMB、iSCSI、NVME-TCP 等,或任何带有 _netdev
伪挂载选项的挂载)用于第 1 类或第 2 类挂载,请确保使用能够在 initrd 阶段或早期引导期间运行的网络管理实现。例如,systemd-networkd(8) 在这类场景下非常适用。
需要注意,systemd-homed.service(8)
(这是一个常规服务,即运行于 basic.target 之后)要求 /home/ 已完成挂载。
手册页 #
面向管理员的systemd博客系列 #
好的,这是按照您要求的格式进行的翻译:
- 01: Verifying Bootup (验证启动)
- 02: Which Service Owns Which Processes? (哪个服务拥有哪个进程?)
- 03: How Do I Convert A SysV Init Script Into A systemd Service File? (如何将 SysV Init 脚本转换为 systemd 服务文件?)
- 04: Killing Services (终止服务 / 杀死服务)
- 05: The Three Levels of “Off” (“关闭”的三个级别)
- 06: Changing Roots (更改根目录)
- 07: The Blame Game (追溯责任 / 责任归咎)
- 08: The New Configuration Files (新的配置文件)
- 09: On /etc/sysconfig and /etc/default (关于 /etc/sysconfig 和 /etc/default)
- 10: Instantiated Services (实例化的服务)
- 11: Converting inetd Services (转换 inetd 服务)
- 12: Securing Your Services (保护你的服务)
- 13: Log and Service Status (日志和服务状态)
- 14: The Self-Explanatory Boot (自解释启动)
- 15: Watchdogs (监控程序 / 看门狗)
- 16: Gettys on Serial Consoles (and Elsewhere) (串行控制台(以及其他地方)上的 Gettys)
- 17: Using the Journal (使用日志)
- 18: Managing Resources (管理资源)
- 19: Detecting Virtualization (检测虚拟化)
- 20: Socket Activated Internet Services and OS Containers (套接字激活的互联网服务和操作系统容器)
- 21: Container Integration (容器集成)
systemctl常用命令 #
验证服务是否启动:
1systemctl status chronyd | grep Active
2 Active: active (running) since
3
4systemctl is-active chronyd
5active
6
7systemctl stop chronyd
8
9systemctl status chronyd | grep Active
10 Active: inactive (dead) since
11
12systemctl is-active chronyd
13inactive
14
15systemctl start chronyd
查看开机启动项:
1systemctl list-unit-files --type=service | grep enabled