Linux服务启动流程(systemd和SysVinit)

Linux服务启动流程取决于所使用的初始化系统,现代Linux发行版中的两个主要初始化系统是systemdSysVinit(以及Upstart,但它已经相对较少使用)。

在这里,不念将分别介绍这两个初始化系统的服务启动流程。

systemd启动流程:

systemd是许多现代Linux发行版(如Ubuntu、Debian、CentOS和Fedora)的默认初始化系统。systemd使用单元(unit)文件来管理系统资源,如服务、设备、挂载点等。

以下是systemd的服务启动流程:

  • 启动时,systemd将读取/etc/systemd/system/default.target文件,确定默认的目标(如multi-user.targetgraphical.target)。
  • 然后,systemd读取该目标对应的单元文件(位于/etc/systemd/system/lib/systemd/system目录中)和其依赖的其他单元文件。
  • systemd解析单元文件中的指令,如ExecStartExecStopWantsRequires等,确定服务的启动顺序和依赖关系。
  • 依据依赖关系和启动顺序,systemd启动相应的服务。在服务启动过程中,systemd还可以并行启动多个服务,以加快系统启动速度。

SysVinit启动流程:

SysVinit是较早的Linux系统中使用的初始化系统。尽管许多发行版已经迁移到了systemd,但仍有一些发行版(如某些版本的Debian和RHEL)在特定情况下使用SysVinit

以下是SysVinit的服务启动流程:

  • 启动时,SysVinit运行/etc/inittab文件,确定系统的运行级别(如235等)。
  • SysVinit然后进入相应的运行级别目录(如/etc/rc3.d),按照文件名前缀中的数字顺序(如S10networkS20apache2等)执行服务脚本。
  • 服务脚本通常位于/etc/init.d目录中,并在运行级别目录中以符号链接的形式存在。这些脚本包含了启动、停止和重启服务所需的命令。
  • 在服务启动过程中,SysVinit按照脚本的顺序依次启动各个服务。与systemd相比,SysVinit的启动过程较为线性,不支持服务的并行启动。
阅读剩余
THE END