systemd是一个Linux系统下的初始化系统(init system)和服务管理器(service manager),由Lennart Poettering带头开发,并在LGPL 2.1及其后续版本许可证下开源发布。其开发目标是提供更优秀的框架以表示系统服务间的依赖关系,并依此实现系统初始化时服务的并行启动,同时降低Shell的系统开销,最终代替常用的System V与BSD风格init程序。
systemd不仅负责启动操作系统,还接管了后台服务、结束、状态查询以及日志归档、设备管理、电源管理、定时任务等许多职责。它支持通过特定事件(如插入特定USB设备)和特定端口数据触发的按需(On-demand)任务。此外,systemd具有一系列特性,如支持并行化任务、采用Socket激活式与D-Bus总线激活式服务、按需启动守护进程、利用Linux的cgroups监视进程、支持快照和系统恢复、维护挂载点和自动挂载点,以及各服务间基于依赖关系进行精密控制等。
在systemd中,后台服务具有特殊的身份,即它是系统中PID值为1的进程。它提供了服务按需启动的能力,使得特定的服务只有在真正被请求时才启动。对于用户自定义的服务,systemd允许配置其启动依赖项目,从而确保服务按必要的顺序运行。
检视和控制systemd的主要命令是systemctl。总的来说,systemd是一个功能强大的系统和服务管理器,能够极大地提高Linux系统的启动速度和运行效率。
以下是关于systemd的详细概念及功能的描述:
概念:
- 初始化系统:systemd作为Linux内核启动后的第一个进程(PID为1),负责管理和协调系统初始化过程中的各个服务。
- 服务管理器:它不仅管理系统的启动过程,还负责在系统运行时管理服务(如守护进程)的状态,确保它们按照正确的顺序启动、停止或重启。
功能:
- 并行化启动:与SysV-init不同,systemd允许更多的服务并行启动,而不是依次执行启动脚本,从而提高了系统启动速度。
- 依赖管理:systemd能够识别服务间的依赖关系,确保服务按照必要的顺序启动和停止。用户还可以自定义服务的依赖关系。
- Socket与总线激活服务:为了提高服务的并行运行性能,systemd采用Socket激活式和总线激活式服务。
- 进程追踪与控制:systemd使用cgroups代替PID来追踪进程,确保即使是两次fork之后生成的守护进程也不会脱离其控制。
- 按需启动:systemd提供了服务按需启动的能力,使得特定的服务只有在真正被请求时才启动,进一步降低了系统资源消耗。
- 系统状态与日志管理:systemd能够监视和控制系统状态,记录并管理系统日志,方便管理员查看和调试系统问题。
- 其他功能:除了上述功能外,systemd还支持快照和系统恢复、维护挂载点和自动挂载点、管理网络配置、网络时间同步、日志转发和名称解析等任务。此外,它还可以运行容器和虚拟机,并管理电源管理、定时任务等。
总的来说,systemd是一个功能强大且全面的系统初始化系统和服务管理器,它通过提供优秀的框架和强大的功能,使得Linux系统的管理和维护变得更加简单、高效和可靠。
service配置文件字段
unit部分:
- Description:指定当前服务的简单描述。
- Documentation:指定服务的文档位置,可以是一个或多个文档的URL。
- After 和 Before:定义服务的启动顺序,表示当前服务应该在哪些服务之后或之前启动。注意,这两个字段只涉及启动顺序,不涉及依赖关系。
- Wants:表示当前服务与另一个服务之间存在弱依赖关系。如果另一个服务启动失败或停止运行,不影响当前服务继续执行。<