下面就是详细讲解“详解Linux系统中的SysVinit的机制”的完整攻略,包含两条示例说明。
SysVinit机制是什么?
在了解SysVinit机制之前,我们需要先对init系统有一定的了解。在Linux系统启动时,init是第一个进程启动。init是Linux系统中的进程管理工具,它负责管理系统的进程,为用户提供进程管理和控制服务。在init中,常见的有三种实现机制:SysV init、Upstart 和 Systemd。其中,SysV init是最早出现的一种init实现机制,下面我们主要介绍这种机制的原理。
SysVinit机制是在Linux系统中进程管理和启动的机制,它通过在系统启动时根据不同运行级别执行不同的脚本文件来实现进程的启动和关闭。这种实现方法是一种基于脚本的启动管理机制,通过在特定的目录下放置一些脚本文件,系统可以按照用户定义的顺序启动和关闭不同的应用程序和服务。
SysVinit的启动流程
下面是SysVinit的启动流程:
- BIOS启动计算机,并将控制权转移到MBR(Master Boot Record)。
- 操作系统的引导器读取启动加载程序。
- 加载程序加载内核镜像。
- 内核加载完毕后,转到init进程。
- init进程查找启动级别,并启动各个运行级别对应的脚本文件。
SysVinit的运行级别
在Linux系统中,有多个运行级别,每个运行级别都对应着不同的系统服务和程序。SysVinit通过运行级别来确定启动哪些脚本文件,并关闭哪些服务。运行级别从0到6,以下是常见的运行级别:
- 0:关机
- 1:单用户
- 2:多用户,没有NFS(Network File System)
- 3:完整的多用户模式
- 4:不用,保留
- 5:完整的多用户模式,并启动X Windows系统
- 6:重新启动系统
SysVinit的脚本文件
在SysVinit机制中,启动服务和程序的方法就是通过在特定的目录下(一般是/etc/rc.d/init.d)放置一系列的脚本文件。这些脚本文件都以特定的命名规则进行命名,例如以“K”开头的脚本用于关闭服务,以“S”开头的脚本用于启动服务。
脚本文件的名字如下所示:
$ /etc/rc.d/init.d/SERVICE_NAME
$ /etc/rc.d/init.d/SERVICE_NAME_ARGUMENTS
其中,SERVICE_NAME为服务的名称,这个名称是由管理员自定义的,而且在脚本文件中要使用这个名称来定义启动脚本的功能。
下面是一个简单的示例,演示如何创建一个 SysVinit 脚本。
首先,我们需要创建一个名为“myservice”的服务。我们可以使用以下命令创建这个服务:
$ sudo touch /etc/rc.d/init.d/myservice
紧接着,我们需要在myservice文件中定义脚本的执行。以下是myservice文件的内容:
#!/bin/bash
# Define the script arguments
case "$1" in
start)
echo "Starting the service"
;;
stop)
echo "Stopping the service"
;;
*)
echo "Usage: $0 {start|stop}"
exit 1
;;
esac
exit 0
示例1:如何利用SysVinit机制启动一个服务
接下来,我们演示如何利用 SysVinit 机制启动一个服务。我们以 Nginx 服务为例。
首先,在 /etc/rc.d/init.d中创建一个脚本文件nginx。在该文件中,定义以下内容:
#!/bin/bash
# Nginx init script - CentOS7
# chkconfig: - 85 15
# description: Nginx is an HTTP (web) server
# processname: nginx
NGINX_CONF_FILE=/usr/local/nginx/conf/nginx.conf
NGINX_EXEC=/usr/local/nginx/sbin/nginx
case "$1" in
start)
echo "Starting nginx server ..."
$NGINX_EXEC -c $NGINX_CONF_FILE
;;
stop)
echo "Stopping nginx server ..."
killall -QUIT nginx
;;
restart)
$0 stop
sleep 1
$0 start
;;
*)
echo "Usage: $0 {start|stop|restart}"
;;
esac
exit 0
之后,我们需要将该脚本复制到/etc/rc.d/init.d中。
sudo cp nginx /etc/rc.d/init.d/
接着,使其可执行,并将其加入 chkconfig 来注册服务
sudo chmod +x /etc/rc.d/init.d/nginx
sudo chkconfig --add nginx
sudo chkconfig --level 345 nginx on
这时候再尝试启动这个服务
sudo service nginx start
示例2:如何利用SysVinit机制关闭一个服务
与上面的示例一样,我们使用 Nginx 服务作为示例。
关闭Nginx服务:
sudo service nginx stop
这样Nginx服务就已经停止了。稍等片刻,我们可以验证该服务已经停止。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:详解Linux系统中的SysVinit的机制 - Python技术站