Ubuntu 使用 upstart 而不是 sysvinit。但是仍然有运行级别及其中的链接。
我已经安装了 tor,它已将自身添加到操作系统的启动中。现在我想删除它,常用的选项是从运行级别删除启动和停止服务的链接,或者使 /etc/init.d/ 脚本不可执行。这很好,但如果我想将 tor 再次放入启动列表中,这将有问题。我怎么知道将正确的序列放在正确的运行级别目录中。
有没有完整的指南?这有什么规则?有什么工具可以管理 init?
请告知
答案1
SysVinit 的工作原理如下。每个包的初始化脚本位于/etc/init.d。这些脚本的链接位于/etc/rcS.d和/etc/rc[0-6].d. 这些链接以年代(开始)或钾(杀死)和一个两位数。
当系统启动并且 SysVinit 进程启动时,它会查找/etc/rcS.d并执行以年代,按数字排序。(我相信它将“start”参数传递给了脚本,但我不确定。)
处理完所有 /etc/rcS.d 脚本后,系统开始进入某个运行级别。在 Ubuntu 中,启动到普通桌面时,默认运行级别是2. 因此 SysVinit 会查看/etc/rc2.d和
- 停止所有以以下链接开头的服务钾,按数量排序;以及
- 启动所有带有以 开头的链接的服务年代,按数量排序。
如果你已启动到 Ubuntu 的恢复模式,则你将启动到运行级别1所有服务启动完成后,系统运行级别就正式设置好了。
最后,系统运行/etc/rc.local脚本。
如果你稍后切换运行级别,SysVinit 会运行相同的基本过程:它不会检查/etc/rcS.d,而是直接处理链接/etc/rcN.d(其中 N 是正在输入的运行级别)。
你也可以编写一个 Upstart 脚本。我已经之前写过关于 Upstart 的文章,请查看那里了解更多详细信息。Upstart 脚本保存在/etc/init;编写它们,查看现有脚本以了解其工作原理,并阅读init(5) 手册页。
答案2
答案3
这里是update-rc.d 手册页。基本上,删除 rc.d 链接不会起作用,因为它们将在升级时恢复。正确的方法是:
sudo update-rc.d tor disable
这会将 /etc/rc?.d 中的 S(启动)链接重命名为 K(停止)链接。这也可以工作:
sudo rename 's:/S:/K:g' /etc/rc?.d/S*tor