我一直在使用Linux一段时间,但以一个相当简单的方式。
我知道init.d中的脚本是在os启动的时候执行的,但是它究竟是如何工作的呢?
操作系统如何知道哪个parameter passing给脚本?
启动apache我会做sudo /etc/init.d/apache2 start。 如果我运行sudo /etc/init.d/apache2,没有启动就无法运行。 os如何开始到脚本?
根据您的Linux发行版和版本,最终sysvinit脚本( /etc/init.d/
那些脚本)通常由/etc/init.d/rc
存在于/etc/rc[0-6S].d
的符号链接运行/etc/init.d/rc
。
在Ubuntu下,你要么使用旧式的sysvinit
,要么是最近的upstart
。 在新贵的pipe理目录( /etc/events.d/
)下,你会发现一个遗留模式,它回退到/etc/init.d/rc
调用。 否则,通过/etc/inittab
为每个运行级别调用/etc/init.d/rc
。
如果您检查/etc/init.d/rc
的逻辑,您会发现它根据运行级别( 0
& S
无条件停止)或脚本前缀( S[0-9][0-9]*
脚本开始, K[0-9][0-9]*
(杀死)脚本停止)。 运行级别目录(例如: /etc/rc1.d/
)中脚本的编号决定脚本停止或启动的顺序。 杀死脚本首先运行,然后启动脚本。
更多关于这个,研究sysvinit和新贵。
我build议你阅读一些关于如何运行级别和初始化脚本工作的教程 – http://www.debian-administration.org/article/212/An_introduction_to_run-levels似乎是很容易理解的。
简而言之,脚本不是直接调用,而是通过/etc/rc.d目录中的符号链接(其中n = runlevel)来调用。 符号链接的名称格式如下:
[K | S] + nn + [string]
其中nn是标记脚本运行顺序的数字(较低的数字在前),K或S决定是否使用“stop”或“start”参数运行脚本。