科技 · 2023-10-05 0

Linux系统中启动命令和任务的执行顺序

linux 的开机流程,大概如下:

  • 加载 BIOS 的硬件信息,并进行自我检测,并依据设定取得第一个可开机的装置(通常就是硬盘)
  • 读取并执行装置内 MBR 的 boot loader (grub 等引导程序)
  • 依据 boot loader 的设定加载核心 kernel, kernel 会开始侦测硬件并加载驱动程序
  • 在硬件驱动成功后, 核心会主动呼叫 init 程序,而 init 会 根据设置的 run-level 信息(/etc/inittab 文件中定义了默认的运行级别)
  • init 执行 /etc/rc.d/rc.sysinit 文档来准备软件执行的作业环境(例如网络,语系,时区等)
  • 执行 /etc/rc.d/rc $RUNLEVEL # $RUNLEVEL为缺省的运行模式 根据 run-level执行对应目录rcN.d下的服务(N 表示运行级别,例如rc3.d目录下的服务就是全用户文本模式下要开启的服务)
  • /etc/rc.d/rc.local #相应级别服务启动之后、在执行该文件(其实也可以把需要执行的命令写到该文件中)
  • 执行终端仿真程序 mingetty 来启动 login 程序,等待用户登陆

在Linux系统中,不同的启动命令和任务可以使用不同的方法进行管理和调度。以下是几种常见的启动命令和任务的管理方式以及它们的执行顺序:

  1. /etc/rc.local: /etc/rc.local 是一个脚本文件,用于在系统引导过程中执行自定义的启动命令或任务。这些命令将在系统引导时以 root 权限执行。执行顺序是在系统引导时,当 rc.local 被调用时按照脚本中的顺序执行。
  2. Cron 任务(crontab): Cron 是一个任务调度工具,可以用来定期执行命令或脚本。Cron 任务的执行时间是根据指定的时间表(cron 表达式)来决定的。不同的任务可以有不同的执行时间,因此它们的执行顺序是根据 cron 表达式和任务定义来确定的。
  3. systemd 服务: 在现代的 Linux 发行版中,通常使用 systemd 来管理系统服务。systemd 可以并行启动多个服务,而不是按照顺序执行。每个服务单独定义了启动条件和依赖关系,因此它们的执行顺序是根据这些条件和依赖关系来确定的。
  4. /etc/init.d/ 脚本: 在一些 Linux 发行版中,系统初始化脚本存储在 /etc/init.d/ 目录中。这些脚本通常用于启动和停止系统服务。执行顺序可能是根据脚本的名称或其他约定来确定的。
  5. 用户登录脚本: 用户登录时,可以执行用户特定的启动脚本,如 ~/.bashrc~/.bash_profile 等。这些脚本在用户登录时按照一定的顺序执行。

总的来说,启动命令和任务的执行顺序取决于它们的管理方式和系统的初始化流程。不同的系统和发行版可能会有不同的管理方式和执行顺序。一般来说,系统级别的任务(如 systemd 服务)通常是并行执行的,而定时任务(如 cron 任务)是根据时间表依次执行的。用户级别的任务(如用户登录脚本)则在用户登录时执行。如果需要更详细的执行顺序,您可以查看相关的配置文件或系统文档以获取更多信息。