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