深入解析 Linux init.d 开机启动

Linux init.d 是 Linux 系统最早提供的一个脚本管理方法,该方法基于 shell 脚本,通过在 /etc/init.d 目录下创建相应服务脚本实现服务的启动、停止和管理。本文将从开机启动的概念入手,解析 init.d 开机启动的原理、实现方法和细节,帮助读者深入理解 Linux 系统的启动管理方式。

一、init.d 开机启动原理

init.d 是基于 System V 的 init 管理工具的一种升级版本,该工具用于控制 Linux 系统的启动进程。在 Linux 系统中,init 进程通常是操作系统启动的第一个进程,其作用是负责对系统进程进行初始化和管理。init 进程启动时会执行 /etc/init.d/rcS 脚本,该脚本会加载位于 /etc/rcS.d 目录下所有以 S 开头的脚本,这些脚本都是系统的基本服务,它们依次启动,直到系统准备好进入用户交互模式。

在 init.d 开机启动过程中,系统会先执行 /etc/rc.d/rc.sysinit 脚本进行系统初始化设置,然后执行 /etc/rc.d/rc.local 脚本启动用户特定的服务。在 init.d 脚本中,每个服务都有一个唯一标识符,系统通过这个标识符来识别每个服务,并控制其启动、停止和管理。通常情况下,init.d 脚本还会包含各种辅助功能,如检测进程是否已经启动、创建日志文件、设置环境变量等。

二、创建 init.d 服务脚本

在 Linux 系统中,每个服务都需要一个 init.d 脚本文件来实现启动和停止功能。在创建 init.d 脚本时,需注意以下几点:

1. 文件命名规范

在 /etc/init.d 目录下,所有服务脚本通常以服务的名称命名,并在命名后面加上可执行文件的扩展名。例如,apache2 服务的脚本文件名为 apache2。

2. 文件格式规范

init.d 脚本必须在第一行声明解释器类型,一般为 #!/bin/bash 或 #!/bin/sh。脚本文件开头通常还包括以下注释信息:

#!/bin/bash
# chkconfig: 2345 90 10
# description: Apache Web Server

其中 chkconfig 参数指定服务在哪几个运行级别中启动,数字 2345 表示可以在运行级别 2、3、4 和 5 中启动、关闭,90 表示启动顺序为 90,停止顺序为 10。description 参数用于服务的描述说明。

3. 函数定义规范

init.d 脚本通常包含以下若干函数定义:

start(){ }
stop(){ }
restart(){ }
status(){ }

其中 start() 函数表示服务启动的方法,stop() 函数表示关闭服务的方法,restart() 函数表示重启服务的方法,status() 函数表示查询服务状态的方法。这些函数都需要根据实际情况在脚本中进行实现。例如:

start(){
echo “Starting Apache Web Server…”
/usr/local/apache2/bin/apachectl start
}

stop(){
echo “Stopping Apache Web Server…”
/usr/local/apache2/bin/apachectl stop
}

三、通过 chkconfig 管理 init.d 服务

chkconfig 是 Linux 系统用于管理服务 init.d 脚本的命令行工具。该工具可以查询、启动、停止和管理系统中添加的所有服务。以下是 chkconfig 常用命令:

1. 查询已开机启动服务

chkconfig –list

2. 查询某个服务的启动状态

chkconfig –list service

3. 在某个运行级别下设置某个服务的启动状态

chkconfig –level 2345 service on
chkconfig –level 2345 service off

4. 启动、停止、重启服务

service start service
service stop service
service restart service

5. 在特定时间执行服务

at now + 10 minutes <<< "service service start"

四、实现开机启动

实现 init.d 开机启动需要在 /etc/rc.d 目录下创建对应的启动链接。启动链接是指在 /etc/rc.d/rc?.d 目录下创建一个以 S 开头的软链接和一个以 K 开头的软链接。以 S 开头的软链接会在指定的运行级别下启动服务,而以 K 开头的软链接会在这个运行级别下停止服务。

例如,如果要在运行级别 2,3,4 和 5 下启动 apache2 服务,需要在 /etc/rc.d/rc2.d、/etc/rc.d/rc3.d、/etc/rc.d/rc4.d 和 /etc/rc.d/rc5.d 目录下分别创建 S90apache2 和 K10apache2 两个软连接。其中 S90apache2 链接到 /etc/init.d/apache2 服务脚本,使得系统在对应的运行级别下启动 apache2 服务,而 K10apache2 链接到同一个服务脚本的 stop 函数,使得系统在对应的运行级别下停止 apache2 服务。

    ln -s /etc/init.d/apache2 /etc/rc.d/rc2.d/S90apache2
    ln -s /etc/init.d/apache2 /etc/rc.d/rc3.d/S90apache2
    ln -s /etc/init.d/apache2 /etc/rc.d/rc4.d/S90apache2
    ln -s /etc/init.d/apache2 /etc/rc.d/rc5.d/S90apache2
    ln -s /etc/init.d/apache2 /etc/rc.d/rc2.d/K10apache2
    ln -s /etc/init.d/apache2 /etc/rc.d/rc3.d/K10apache2
    ln -s /etc/init.d/apache2 /etc/rc.d/rc4.d/K10apache2
    ln -s /etc/init.d/apache2 /etc/rc.d/rc5.d/K10apache2

五、小结

本文从 init.d 开机启动的原理、创建服务脚本、通过 chkconfig 管理服务、实现开机启动等多个方面深入阐述了该方法的详细实现方法和细节。通过了解和掌握 init.d 开机启动的相关内容,读者可以更好地理解 Linux 系统启动管理的工作原理,并在实际工作中更有效地进行系统管理和维护。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/207077.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-12-08 14:20
下一篇 2024-12-08 14:20

相关推荐

  • Python中new和init的区别

    new和init都是Python中常用的魔法方法,它们分别负责对象的创建和初始化,本文将从多个角度详细阐述它们的区别。 一、创建对象 new方法是用来创建一个对象的,它是一个类级别…

    编程 2025-04-29
  • 如何在Linux中添加用户并修改配置文件

    本文将从多个方面详细介绍在Linux系统下如何添加新用户并修改配置文件 一、添加新用户 在Linux系统下创建新用户非常简单,只需使用adduser命令即可。使用以下命令添加新用户…

    编程 2025-04-27
  • 如何解决linux jar包 invalid or corrupt jarfile问题

    对于许多开发人员和系统管理员在Linux环境下使用Java开发过程中遇到的一个常见的问题是 invalid or corrupt jarfile(无效或损坏的jar文件)错误。当您…

    编程 2025-04-27
  • 在Linux上安装JRE并配置环境变量

    本文将从以下几个方面为您详细阐述如何在Linux系统上,通过自己账户安装JRE,并且配置环境变量。 一、安装JRE 在进行安装前,我们需要下载JRE的安装包并解压,可以从官方网站下…

    编程 2025-04-27
  • GTKAM:Linux下的照片管理器

    GTKAM是用于Linux操作系统的一款照片管理器,它支持多种相机及存储设备,并提供了一系列强大的工具,让用户可以方便地浏览、管理、编辑和导出照片。本文将从多个方面对GTKAM进行…

    编程 2025-04-27
  • Linux sync详解

    一、sync概述 sync是Linux中一个非常重要的命令,它可以将文件系统缓存中的内容,强制写入磁盘中。在执行sync之前,所有的文件系统更新将不会立即写入磁盘,而是先缓存在内存…

    编程 2025-04-25
  • Linux修改文件名命令详解

    在Linux系统中,修改文件名是一个很常见的操作。Linux提供了多种方式来修改文件名,这篇文章将介绍Linux修改文件名的详细操作。 一、mv命令 mv命令是Linux下的常用命…

    编程 2025-04-25
  • 深入解析Vue3 defineExpose

    Vue 3在开发过程中引入了新的API `defineExpose`。在以前的版本中,我们经常使用 `$attrs` 和` $listeners` 实现父组件与子组件之间的通信,但…

    编程 2025-04-25
  • 深入理解byte转int

    一、字节与比特 在讨论byte转int之前,我们需要了解字节和比特的概念。字节是计算机存储单位的一种,通常表示8个比特(bit),即1字节=8比特。比特是计算机中最小的数据单位,是…

    编程 2025-04-25
  • 深入理解Flutter StreamBuilder

    一、什么是Flutter StreamBuilder? Flutter StreamBuilder是Flutter框架中的一个内置小部件,它可以监测数据流(Stream)中数据的变…

    编程 2025-04-25

发表回复

登录后才能评论