ubuntu init启动流程

摘要:
init进程在第一次启动时搜索该文件。事实上,Ubuntu并没有直接使用SystemV风格来启动服务。要知道,Ubuntu中的init已被Upstartinit替换,而SystemV风格的服务存储在/etc/rc${runlevel}D目录中,但Upstartinit不会直接运行到此目录来启动服务。换句话说,Ubuntu中的init不会直接转到/etc/init。d或/etc/rc${runlevel}d/相反,它采用了一种折衷的方法,通过/etc/initD/下的一些配置文件调用/etc/rc${runlevel}来启动使用旧SystemV样式的服务。Rc sysinit在启动事件发生时启动,即Upstartinit将首先读取Rc sysinit。conf并执行相关的配置和脚本。

ubuntu的init方式有两种:一种是System V initialization,一种是Upstart。ubuntu6.10以前的版本是第一种方式,之后的版本是第二种方式。

在旧式的System V initialization中,/etc/inittab文件可是相当的重要。init进程启动后第一时间就是找这个文件。它负责系统的初始化,设置系统的runlevel及进入各个runlevel对应要执行的命令。决定启动级别的语句是id:5:initdefault这一行(这里设置的runlevel是5)。假设当前的inittab设置的runlevel就是5,则init会运行/etc/init.d/rc 5(最后面的5是传入的参数)命令,该命令会依据系统服务的依赖关系遍历执行/etc/rc5.d中的脚本/程序,来启动系统。我们可以打开/etc/rc5.d文件,会发现里面都是到/etc/init.d下文件的软链接。

1 zqx@zqx-K40AB:/etc$ ls -l rc5.d/
2 总用量 4
3 -rw-r--r-- 1 root root 677  4月 14  2012README
4 lrwxrwxrwx 1 root root  20 10月 27 18:20 S20kerneloops -> ../init.d/kerneloops
5 lrwxrwxrwx 1 root root  27 10月 27 18:20 S20speech-dispatcher -> ../init.d/speech-dispatcher
6 lrwxrwxrwx 1 root root  20 10月 29 22:11 S31atieventsd -> ../init.d/atieventsd
7 lrwxrwxrwx 1 root root  20 10月 27 18:20 S50pulseaudio -> ../init.d/pulseaudio
8 lrwxrwxrwx 1 root root  15 10月 27 18:20 S50rsync -> ../init.d/rsync
9 lrwxrwxrwx 1 root root  15 10月 27 18:20 S50saned -> ../init.d/saned
10 lrwxrwxrwx 1 root root  19 10月 27 18:20 S70dns-clean -> ../init.d/dns-clean
11 lrwxrwxrwx 1 root root  18 10月 27 18:20 S70pppd-dns -> ../init.d/pppd-dns
12 lrwxrwxrwx 1 root root  14 10月 27 18:20 S75sudo -> ../init.d/sudo
13 lrwxrwxrwx 1 root root  22 10月 27 18:20 S99acpi-support -> ../init.d/acpi-support
14 lrwxrwxrwx 1 root root  21 10月 27 18:20 S99grub-common -> ../init.d/grub-common
15 lrwxrwxrwx 1 root root  18 10月 27 18:20 S99ondemand -> ../init.d/ondemand
16 lrwxrwxrwx 1 root root  18 10月 27 18:20 S99rc.local -> ../init.d/rc.local

我们再来看看这几年才提出来的Upstart方式,这种是基于事件模式的,这种方式可以在系统运转的任何时期都可以通过发送事件来启动或终止服务。当然了,System V initialization方式也可以通过etc/init.d/Servicetart/stop/otherCommand来操作服务,但很明显不如Upstart方式简洁明白。

Ubuntu现行的系统是兼容System V initialization方式的,我目前PC上的系统是Ubuntu 12.4的,可以看到系统中有如下几个目录:

1 /etc/init
2 /etc/init.d
3 /etc/rc${runlevel}.d

作为两种init方式各自特征的/etc/init.d,/etc/rc${runlevel}.d目录和/etc/init目录在Ubuntu中都有了,那么Ubuntu是如何实现兼容的?实际上,Ubuntu中并没有直接采用System V-style启动服务,要知道,Ubuntu中的init已被替换为Upstart init,而System V-style的服务是存放于/etc/rc${runlevel}.d目录中的,(而/etc/rc${runlevle}.d/下的文件是到/etc/init.d的软链接)可Upstart init并不会直接跑到这里面去启动服务。它是通过间接调用来启动这类服务的。换句话说,Ubuntu中的init并不会直接奔着/etc/init.d或者/etc/rc${runlevel}.d/而去,它采用了折衷的办法,通过/etc/init下的某些配置文件调用/etc/rc${runlevel}.d/中的脚本以启动采用旧式System V-style的服务

看以下的例子:

进入/etc/init目录(Upstart init会到该目录下读取配置文件),有几个rc文件

1 rc.conf
2 rc-sysinit.conf
3 rcS.conf

rc-sysinit在startup事件发生时被启动,rc在系统runlevel变化时被启动,rcS在系统runlevel为S时启动。在配置文件的注释中说明了,这几个文件,正是Upstart init处理System V-style服务的关键。

rc-sysinit在startup事件发生时被启动,即,Upstart init会首先读取rc-sysinit.conf并执行相关配置和脚本。rc-sysinit.conf的主要工作是设置系统默认runlevel,检测是否存在/etc/inittab或内核命令行,若存在,则按内核命令行>/etc/inittab>默认runlevel的顺序设置系统 runlevel。最后,调用telinit进入设置的runlevel。

由于调用了telinit进入了设定的runlevel,runlevel改变的事件发生,此时rc服务启动(当然其他服务也会)。那么,我们就有必要来看看rc.conf中到底有什么东西。打开rc.conf,注意到最后一行:

exec /etc/init.d/rc $RUNLEVEL

是不是感觉/etc/init.d/rc很熟悉,没错,从这里开始,就是System V initialization方式的东西了。在System V initialization中,/etc/inittab中的各runlevel对应的命令行就是通过这种形式设置的。

很明显,/etc/init.d/rc被调用了,并且传入了早前设置好的系统runlevel作为参数。而/etc/init.d/rc会根据传入 的runlevel参数调用/etc/rc${runlevel}.d/下的脚本(以S开头)以启动服务,终止在前次runlevel启动而当前在 runlevel需要终止的服务。通过rc-sysinit和rc间接的调用/etc/init.d/rc从而启动System V-style服务,Ubuntu在采用新式Upstart init照顾了旧式的System V init。

免责声明:文章转载自《ubuntu init启动流程》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇VB6.0 在代码中直接调用 文件打开对话框,不使用windows控件windows下练习linux shell下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

安装phpldapadmin

1. 安装软件 [root@ ~]# yum -y install epel-release [root@ ~]# yum install -y phpldapadmin 2. 配置phpldapadmin [root@ ~]# vi /etc/httpd/conf.d/phpldapadmin.conf # # Web-based tool for...

Rancher的部署安装(编排选用K8S)

为什么要使用Rancher Rancher是一个开源的企业级容器管理平台。通过Rancher,企业再也不必自己使用一系列的开源软件去从头搭建容器服务平台。Rancher提供了在生产环境中使用的管理Docker和Kubernetes的全栈化容器部署与管理平台。 Rancher的官方文档:https://rancher.com/docs/rancher/l...

shell编程之sed

一、sed (Stream Editor) 1、定位行: sed -n '12,~3p' pass #从第12行开始,直到下一个3的倍数行(12-15行) sed -n '12,+4p' pass #从第12行开始,连续4行(12-16行) sed -n '12~3p' pass #从第12行开始,间隔3行输出一次(12,15,18,21...) se...

Centos下网络配置方法(网关、dns、ip地址配置)

本文介绍了centos网络配置的方法,centos网络配置主要包括dns、网关、IP地址: 1、IP地址配置: /etc/sysconfig/network-scripts/ifcfg-eth0 2、网关配置:  /etc/sysconfig/network 3、DNS配置:  /etc/resolv.conf 1、网卡配置: 1 # vi /etc/...

zabbix 监控linux tcp连接数

            zabbix 监控linux tcp连接数                                      作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任。 一.TCP的状态概述 1>.端口状态转换 2>.TCP 三次握手 3>.四次断开 二.zabbix agent端配置监控TCP...

zabbix问题记录

zabbix部署好,在使用一段时间后,出现了不少报错,在此简单做一记录。1)Zabbix监控界面报错Lack of free swap space on Zabbix server”解决公司线上部署的zabbix3.0的监控界面首页报错说无交换内存主机“Lack of free swap space on Zabbix server”解决此问题的步骤如下:...