操作系统如何知道要将哪个参数传递给 /etc/init.d/ ?

操作系统如何知道要将哪个参数传递给 /etc/init.d/ ?

我已经使用 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”参数运行脚本。

相关内容