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