init系统sysvinit,UpStart 简介及chkconfig和service

来源:互联网 发布:娱乐圈八卦 知乎 编辑:程序博客网 时间:2024/06/05 02:38

      • 运行级别runlevle
      • 在liunx下自动启动一些服务需要配置一些参数
      • chkconfig
      • UpStart
      • UpStart 工作配置文件

常见的是init 系统大致有:sysvinit,UpStart 和 systemd。
Sysvinit 用术语 runlevel 来定义”预订的运行模式”。Sysvinit 检查 ‘/etc/inittab’ 文件中是否含有 ‘initdefault’ 项。 这告诉 init 系统是否有一个默认运行模式。
sysvinit会依次加载如下文件

/etc/inittab /etc/rc.d/rc.sysinit/etc/rc.d/rc 和/etc/rc.d/rcX.d/ (X 代表运行级别 0-6)/etc/rc.d/rc.localX Display Manager(如果需要的话)

运行级别runlevle

linux系统runlevle分为7个,如

#   0 - halt (Do NOT set initdefault to this)#   1 - Single user mode#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)#   3 - Full multiuser mode#   4 - unused#   5 - X11#   6 - reboot (Do NOT set initdefault to this)

在liunx下自动启动一些服务需要配置一些参数。

每个 runlevel X 都有一个这样的目录,目录名为/etc/rc.d/rcX.d;如rc.0, rc.1, rc.2, rc.3, rc.4, rc.5, and rc.6或者rc0.d, rc1.d, rc2.d, rc3.d, rc4.d, rc5.d, and rc6.d.; 在这些目录下存放着很多不同的脚本。文件名以 S 开头的脚本就是启动时应该运行的脚本,S 后面跟的数字定义了这些脚本的执行顺序(启动优先级),可以用chkconfig来维护;相应的 k 表示关闭时调用的。在/etc/rc.d/rcX.d 目录下的脚本其实都是一些符号连接文件,真实的脚本文件存放在/etc/init.d 目录下。

init.d下的每一个文件都有类似下面的话:

# chkconfig: 2345 20 80# description: Saves and restores system entropy pool for \# higher quality random number generation.

看有chkconfig的那一行, 2345表示在runlevel 2 3 4 5下被启动,
20为启动优先级(start priority), 80为关闭优先级(stop priority). 即在rc3.d你可能看到 S20 或 K80.
Redhat下的setup也是用它处理的. 你可以再参考一下man chkconfig. 有一点注意, 优先即是一个两位数.

另外的三个文件是这样的

先执行rc.sysinit 完成了包括mount分区 激活swap 加载modules等重要的工作. 再执行rc.local 完成一些本地的处理, 缺省情况下, 它几乎什么都没作.最后是执行rc 启动所有的服务.

假如/etc/inittab文件有如下信息:

id:4:initdefault:l0:0:wait:/etc/rc.d/rc.0l6:6:wait:/etc/rc.d/rc.6x1:4:wait:/etc/rc.d/rc.4

表示运行级别4是默认的runlevel,运行级别4的脚本都在 /etc/rc.d/rc.4

chkconfig

chkconfig用来检查、设定系统的各种服务updates and queries runlevel information for system services
显示所有chkconfig知道的service状态[状态为on或off]

chkconfig --list

假定存在如下脚本:

/etc/init.d/scriptname restart/etc/init.d/scriptname start/etc/init.d/scriptname stop

要实现在runlevel 3、4和5下随机器启动,则运行

#随机器启动chkconfig --level 345 scriptname on#还可以通过sysvinit的server命令启动service scriptname  restart#如果需要关闭chkconfig scriptname off

UpStart

Ubuntu UpStart 是比sysvinit更快的系统,但是他兼容了sysvinit系统。主要的概念是 job 和 event,一个job就是sysvinit里面的一个脚本。
upstart的工作配置文件存放在/etc/init下面,是以.conf 作为文件后缀的文件

/etc/init/*.conf # 文件名就是 service name

Upstart也可以处理sysvinit的脚本,他是通过以下几个job完成的:

/etc/init/rc.conf/etc/init/rcS.conf

打开rc.conf,注意到最后一行:exec /etc/init.d/rc $RUNLEVEL 就是sysvinit中/etc/inittab中的各runlevel对应的脚本。

UpStart 工作配置文件

可以通过命令initctl来操作这些job,就像sysvinit中的server命令一样。目录/etc/init脚本体现了job的名字,如

/etc/init/rc-sysinit.conf #其job名为rc-sysinit/etc/init/net/apache.conf #其job名为net/apache

配置文件job包含一个或者多个小节(stanza)。
1. exec and script
每个job都必须包含exec或者script小节,”exec”配置工作需要运行的命令;用”script”关键字定义需要运行的脚本;
2. pre-start script and post-stop script
在job运行之前,执行 post-start 动作,之后执行 pre-stop 段
3. start on and stop on
定义job启动和关闭的依赖性。如果start on中指定多个事件,表示该job的开始需要依赖多个事件发生; stop on定义工作在什么情况下需要停止
4. console output|owner
默认job的stdin,stdout,stderr都会重定向到/dev/null
5. 更多的job配置可以查看the init(5) man page.

An introduction to services, runlevels, and rc.d scripts
http://blog.itpub.net/12798004/viewspace-1143979/
CentOS Init startup scripts
UbuntuBootupHowto
Upstart
Systemd vs sysvinit
man chkconfig
浅析 Linux 初始化 init 系统,第 1 部分: sysvinit
浅析 Linux 初始化 init 系统,第 2 部分: UpStart
浅析 Linux 初始化 init 系统,第 3 部分: Systemd
Comparison of init systems

0 0