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
常用命令:
- 查询已开机启动服务
chkconfig --list
- 查询某个服务的启动状态
chkconfig --list service
- 在某个运行级别下设置某个服务的启动状态
chkconfig --level 2345 service on chkconfig --level 2345 service off
- 启动、停止、重启服务
service service start service service stop service service restart
- 在特定时间执行服务
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 系统启动管理的工作原理,并在实际工作中更有效地进行系统管理和维护。