Linux启动原理介绍及设置开机启动脚本方法

转自本人个人博客:http://www.xgezhang.com/linux_init_shell.html

之前总是对Linux的整个启动脉络不了解,把这个问题看得很神秘,昨天稍微研究了一下,其实还是很简单的。

Linux启动时,所有的启动脚本都放在/etc/init.d/ 下面,而这些脚本又有映射到各个/etc/rcX.d,这个X代表0-6,分别对应不同的系统级别:

  • 0代表关机(halt)
  • 1级别是单用户模式(single)
  • 2级别是多用户级别,这个是默认级
  • 3,4,5未定义,可以提供给用户定义其他多用户级别
  • 6代表重启(restart)
  • S级别系统内部定义的单用户恢复模式。

也就是说,每一个rcX.d文件里面都会有一些启动项,每个目录下的文件数量是小于 /etc/init.d目录下的总数。对于不同的系统环境,只会运行对应目录中的进程。用户可以通过 runlevel 指令查看本机系统运行级别。

在每一个rcX.d目录中,文件都是通过/etc/init.d里的脚本软连接过来的,命名方式如下:

[K|S][0-9,0-9][name]

K表示stop服务,而S表示start服务, 比如S20hostapd S91apach2

后头跟的两位数数字则是表示运行顺序,小数字优先运行。比如上述启动项,显然apache2服务器需要在前面的网络进程、dns进程等开启之后再打开。

对于不同的文件,总是按照K小数->K大数->S小数->S大数的顺序执行,并且所有文件都会执行。

这里补充一下,多数的linux都是用一种叫System V的机制来启动运行级别,会有一个inittab文件来更改默认配置,并且在所以进程开始之前会先执行sysinit目录下的进程,而ubuntu是用的另一种机制叫startup,从9.10版本之后就没有兼容inittab等方式了,所以找不到这些东西。

介绍完了,那么我们要怎么设置一个开机启动脚本呢?方法有两种:

1.编辑rc.local文件

这是一个给使用者自定义的启动文件,启动顺序在最后,即在启动了rcX.d之后执行,有点类似于windows下面的启动项。我们可以把自己的脚本内容直接编辑到rc.local文件中。这样的做法优点是比较方便,缺点是如果脚本太多不便于管理

    2.添加脚本文件到init.d中,并构建软链接

我们可以把写好的脚本,拷贝到/etc/init.d目录下。然后查看本机的运行级别,比如为2.然后添加一个软链接,比如:

ln  -s /etc/init.d/myshell   /etc/rc2.d/S60mysqld

或者这里介绍一个update-rc.d指令,是专门用来建立启动项软链接,并且设置级别和顺序的指令:

1、设置指定启动顺序、指定运行级别的启动项:    update-rc.d <service> start <order> <runlevels>

2、设置在指定运行级中,按指定顺序停止:    update-rc.d <service> stop <order> <runlevels>

3、从所有的运行级别中删除指定的启动项:    update-rc.d -f <script-name> remove

比如:update-rc.d myshell start 90 1 2 3 4 5 . stop 52 0 6 .

start 90 1 2 3 4 5 . : 表示在1、2、3、4、5这五个运行级别中,按先后顺序,由小到大,执行顺序是90。

stop 52 0 6 . :表示在0、6这两个运行级别中,按照先后顺序,由小到大,第52个停止这个脚本的运行。

最后提一点,如果想要删除某个运行级别所要运行的服务,可以把相应rcX.d文件夹里的软连接名字的第一个字母小写(这个是debian的文章推荐的做法,也是bum的做法),也可以删除这个软连接(这个是sysv-rc-conf的做法)。具体怎么做就看各位了。

欢迎转载,请注明出处。

时间: 2024-10-20 04:56:53

Linux启动原理介绍及设置开机启动脚本方法的相关文章

Linux系统中svn服务器设置开机启动

安装完svn服务器后虽然好用但是因为经常重启Linux服务器,每次重启完就要去手动启动svn服务器,很是麻烦,于是在网上找了一些方法后,自己把svn服务器设置成开机启动 步骤一:安装svn服务器: http://www.cnblogs.com/puloieswind/p/5856326.html 我是借鉴这位大哥的方法,成功安装并运行svn服务器 1. 安装SVN服务器: 检查是否已安装 # rpm -qa subversion 安装SVN服务器 # yum install httpd http

使用本脚本可以自动批量完成中间节点环境的部署工作,包括:Nginx编译安装、添加程序管理脚本、设置开机启动、反向代理配置、证书分发、添加iptables规则等

使用本脚本可以自动批量完成中间节点环境的部署工作,包括:Nginx编译安装.添加程序管理脚本.设置开机启动.反向代理配置.证书分发.添加iptables规则等.脚本支持自定义nginx安装版本.设置编译模块.配置监听端口等. 1. Nginx Role规则说明 本脚本用于中间节点(Nginx反向代理)环境的自动化配置,主要内容包括: 安装基础依赖环境: 创建nginx启动用户(支持自定义用户): 下载nginx安装文件(可自定义nginx版本): 解压安装文件: 执行编译安装(可自定义编译参数和

linux jexus 服务 设置开机启动

linux jexus 服务 设置开机启动 linux的服务开机设置一般在 /etc/init.d/里 而jexus的默认安装目录在 /usr/jexus里 启动文件为 jws 参数 有start stop restart 这里贡献一个刚写好的jexus的开启启动脚本 #!/bin/bash ### BEGIN INIT INFO # # Provides: jws # Required-Start: $local_fs $remote_fs # Required-Stop: $local_fs

Linux Redis自动启动,Redis开机启动,Linux Redis设置开机启动

Linux Redis自动启动,Redis开机启动,Linux Redis设置开机启动 >>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ©Copyright 蕃薯耀 2017年7月21日 http://www.cnblogs.com/fanshuyao/ Linux Redis安装,Linux如何安

Centos设置开机启动Apache和Mysql[总结]

Centos设置开机启动Apache和Mysql[总结] 1.前言 最近学习搭建wordpress,需要用到apahce和mysql.我是下载源代码进行安装的,安装在/url/local目录下,每次开机都需要手动启动,有点麻烦.如是想设置开机启动,从网上查了一下,如何设置,总结一下,方便以后使用. 2.设置方法 有两种方法,一种是修改配置文件,一种是通过添加启动项. 方法一:根据系统启动的初始化过程,修改配置文件 Centos中的运行模式2.3.5都把/etc/rc.d/rc.local做为初始

apache与mysql添加进系统服务并设置开机启动

         apache与mysql添加进系统服务并设置开机启动 apache 1  cp /usr/local/apache/bin/apachectl /etc/init.d/httpd 2  chkconfig --add httpd 出现错误service httpd does not support chkconfig 打开 vi /etc/rc.d/init.d/httpd 添加(#!/bin/sh下面) # chkconfig: 345 85 15 # description

win7如何设置开机启动项

想必有很多人都很关心自己的电脑开机速度吧,当然改善开机的方式有很多,这里为大家介绍的是设置开机启动项,当我们电脑的开机启动项过多,开机的时候就会一一加载,这样就会导致开机速度变得很慢,我们可以尽量减少程序开机启动项,但是一些电脑新手却不知道要怎么设置,那么现在就跟大家分享一下win7如何设置开机启动项吧. 方法一. 1.首先打开"开始菜单-运行",在运行对话框中输入msconfig,回车打开系统配置界面: 2.然后在弹出来的配置窗口中切换到"启动"选项卡,在列表中将

Mac设置开机启动

Mac设置开机启动 发表于 2018-11-27 |  更新于 2018-12-13 |  分类于 系统工具 本文针对命令行使用的开发工具或自己编写的脚本设置开机启动,图形化界面的程序仅需要设置->用户与群组->登录项中即可配置 相比于 Linux 开机启动设置的简单方便–配置 rc.local 文件即可,macOS 设置开机启动略显麻烦 如果是使用 homebrew 安装软件自然不用考虑开机启动这回事,但有时候想执行自己的脚本或者有特殊需求,就不得不自己处理开机启动了 使用登录项添加可执行脚

centos7安装docker并设置开机启动

版本要求:查看内核版本,需大于3.10 [[email protected] ~]# uname -r 3.10.0-327.10.1.el7.x86_64 更新内核:如果是生产机器务必慎重更新内核,避免出现不必要的问题. sudo yum update 安装docker [[email protected] ~]# curl -sSL https://get.docker.com/ | sh + sh -c 'sleep 3; yum -y -q install docker-engine'