1、init进程
init进程,是一个由内核启动的用户级进程,内核自行启动后,就通过启动 init来完成引导进程。所以,init始终是第一个进程(其进程编号始终为1)。init程序位于/sbin/init,如果内核找不到init,就会尝试运行/bin/sh;
2、运行级别
运行级就 是操作系统当前正在运行的功能级别。这个级别从1到6 ,具有不同的功能。
3、inittab文件
linux系统在/etc/inittab文件中配置运行级别,供init进程调用。默认首先会启动位于/etc/rc.d/init.d目录中的脚本,这些脚本被“ln”命令连接到 /etc/rc.d/rcn.d 目录(启动n表示0-6的运行级别)。inittab文件所包含的域具有严格的格式。该文件中每个条目的格式为:
id:rstart:action:process:
其中,id域是相应进程的唯一标识。rstart域所包含的数字表示运行该进程的级别。action域告诉init进程如何对待 process所对应的进程。这里可以有很多种动作,但是最常见的是wait和respawn,wait意味着当进程启动后等待它结束,respawn则意 味着如果该进程不存在,则启动相应的进程,如果它存在,那么只要它一掉下来就立即重新启动它。process域包含了实际要运行的命令。
4、rcn目录
rcn.d目录中的脚本都是一些链接,这样是为了省去不必要的副本。这些链接的格式为:
Snnn.script_name
Knnn.script_name
其 中,
S:代表启动相应的进程,K:代表杀死相应的进程。nn:是00至99的两位数字,不过在有些系统中是000至999三位数字。 在不同目录中的链接应采用同一数字。例如,如果某个服务在rc3.d中启动时名为S45.myscript,那么如果希望它在rc2.d中启动,应当使用 链接名S45.myscript。script_name:相应脚本的文件名,根据所在操作系统的不同,它们可能位于下列目录中:/usr/sbin/init.d、/etc/rc.d、/etc/init.d。
当 init进程调用相应的运行级别脚本时,杀进程按照从高到低的K序号进行,即K23.myscript -> K12.named;而启动进程按照从低到高的序号进行。
5、自定义启动服务
创建启动服务可以通过以下3中方法实现:
1).创建启动服务脚本
创建启动脚本必须符合以下条件:
例如现在将要启动、停止一个名为rc.audit的服务,该服务运行于级别3,停止于级别6。通过查看rcN.d中的条目,我 们发现序号35空闲,于是就使用该序号(实际上,系统并不对使用已占用的序号作任何检查)。
假定该脚本已经通过了测试,它能够正确地启动 和停止。现在我们把该脚本放置在相应的运行级别目录中。
在本系统中,rcN.d目录位于/etc/rc.d目录下,而我的运行级别脚本保存在/etc/rc.d/init.d目录下(如果系统目录结构与上面的不同,那么需要对下面的命令作相应的调整)。
$pwd
/etc/rc.d/rc3.d
$ln -s /init.d/rc.audit S35rc.audit
$ls -l
lrwxrwxrws 1 root root S35rc.audit -> /init.d/rc.audit
$pwd
/etc/rc.d/rc6.d
$ln -s /init.d/rc.audit K35rc.audit
$ls -l
lrwxrwxrwx 1 root root K35rc.audit -> /init.d/rc.audit
2).inittab启动
我们还可以通过在inittab文件中加入相应的条目来做到这一点。
上面的一条意思是:
行首的rc.audit是该进程在运行级别3中的唯一标识,该进程只运行一次,所要运行的脚本是/usr/local/etc/rc.audit。
3).rc.local启动
如果不想把/etc/inittab文件弄得过于杂乱,还有其他的方法可以实现启动和停止服务的功能。大多数系统都含有一个名为rc.local的文件, 一般来说也是位于/etc目录下。该脚本文件将在inittab和运行级别脚本之后运行。可以在该文件中加入任何命令,或从中调用最习惯用的启动脚本。有 些系统还在/bin目录下(更多的是在/usr/sbin目录下)含有一个名为shutdown的脚本文件,可以使用它来关闭某些服务。