日期:2014-05-16  浏览次数:20741 次

Linux系统运行级别和init.d脚本

一、概述


?? ?/etc/init.d目录下包含的脚本文件,在系统启动时或更改运行级别时由init进程执行。这些脚本文件以符号链接的形式放在/etc/rc?.d目录下。

?? ?在/etc/rc?.d目录下的符号链接文件的名字命名规则是:Smmscript?或者?Kmmscriptmm是两位数,script是脚本的名字,这个名字和其指向在init.d目录下真正的脚本名字一致。如/etc/rc2.d/S12starteb 对应的 /etc/init.d/starteb。

?? ?当init进程改变到一个运行级别n,rcn.d目录下的脚本就会被执行,首先,执行以K开头的脚本,脚本执行参数是stop,然后,执行以S开头的脚本,脚本执行参数是start,K表示杀死某项服务,而S代表开启某项服务。例如,我们从运行级别2切换到运行级别3,init进程就会首先执行rc3.d目录下所有以K开头的脚本,参数为stop,然后执行rc3.d目录下所有以S开头的脚本,参数为start。mm代表的两位数,用于决定执行这些脚本的顺序,数值越小,越先被执行。例如,K20脚本将会先于K30脚本执行。这被用于某些服务必须先于其他服务运行的情况。例如,bind服务必须先于inn服务运行,在这种情况下,bind的脚本数值就应该比inn服务的小,像这样:

/etc/rc2.d/S17bind
/etc/rc2.d/S70inn

?? ?有两个运行级别,0(halt)和6(reboot)有一些不同。在这两个运行级别中,以S开头的脚本仍然是在以K开头的脚本之后调用,但他们的参数全都是stop,而不是start。


二、书写脚本


?? ?系统启动或者更改运行级别时需要开启或者关闭的服务,其脚本应该放置在/etc/init.d目录下,这些脚本可以接收一个参数,这个参数可以是:

?? ? ? ?start 开启服务

?? ? ? ?stop 关闭服务

?? ? ? ?restart 如果服务在运行,关闭并重启服务;如果服务没有在运行,开启服务

?? ? ? ?reload 不关闭或重启服务,但使得服务的配置重新加载

?? ? ? ?force-reload 使得服务的配置重新加载如果服务支持的话,否则重启服务

?

?? ?init.d目录下的所有脚本都应该支持start,stop,restart,force-reload参数,而reload参数是可选的。init.d目录下的所有脚本必须保证足够健壮,比如当某个服务正在运行的时候,调用start,它应该能够正确返回而且不会产生多个该服务的拷贝,还有当某服务不在的时候调用stop也不会出错。