linux sysvinit与upstart(1)

本文地址:http://blog.csdn.net/spch2008/article/details/9468537


linux通过设置不同的run level级别,使系统启用不同的服务,从而使linux的使用环境有所不同。

0 - halt                     停机
1 - single user mode         单用户,系统故障维护时使用
2 - Multi-user,without NFS  多用户,没有NFS
3 - Fullmulti-user mode      完全多用户
4 - unused                   系统保留
5 - X11                      加载X Window
6 - reboot                   重启
内核加载完毕以后,执行/sbin/init,创建第一个进程,该进程负责配置系统环境,启动服务等。

init读取/etc/inittab配置文档,进行相应操作。

id:5:initdefault:

# System initialization.
si::sysinit:/etc/rc.d/rc.sysinit

l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6

第一行: id:5:initdefault,配置的level为5。

第二行: si::sysinit:/etc/rc.d/rc.sysinit  调用/etc/rc.d/rc.sysinit进行系统初始化。

接下来,根据run level 5,执行/etc/rc.d/rc5.d中的程序。

K01dnsmasq         K73ypbind          K89netplugd         S08iptables        S26lvm2-monitor
K02avahi-dnsconfd  K74ntpd            K89pand             S08mcstrans        S28autofs
rc5.d目录中的脚本都是一些链接,这些链接的格式为:
Snn.script_name    S:代表启动相应的进程, nn为序号
Knn.script_name    K:代表杀死相应的进程,nn为序号

当init进程调用相应的运行级别脚本时,杀进程按照从高到低的K序号进行,即K02avahi-dnsconfd,K01dnsmasq
而启动进程按照从低到高的序号进行。

可见,这些脚本都连接到了/etc/init.d/文件夹中的相应脚本,rcN.d目录都连接到同一个目录下脚本,避免重复。

lrwxrwxrwx 1 root root 17 Mar 30  2011 K01dnsmasq -> ../init.d/dnsmasq
lrwxrwxrwx 1 root root 24 Mar 30  2011 K02avahi-dnsconfd -> ../init.d/avahi-dnsconfd
lrwxrwxrwx 1 root root 17 Mar 30  2011 K05anacron -> ../init.d/anacron
lrwxrwxrwx 1 root root 17 Mar 30  2011 K05wdaemon -> ../init.d/wdaemon

注意到,S99local连接rc.local脚本文件,可以在开机时执行用户设定的自定义功能,比如添加路由,删除路由等。

lrwxrwxrwx 1 root root 11 Mar 30  2011 S99local -> ../rc.local
lrwxrwxrwx 1 root root 16 Mar 30  2011 S99smartd -> ../init.d/smartd

同时注意到:/etc/rc.local, /etc/init.d都连接到了/etc/rc.d/下相应文件。

你可能感兴趣的:(linux sysvinit与upstart(1))