如何更改 Linux 服务启动/引导顺序?

如何更改 Linux 服务启动/引导顺序?

从标题可以清楚地看出,我如何更改 Linux 服务的启动/引导顺序?

答案1

您可以通过重命名 /etc/rcX.d/ 下的符号链接来更改顺序,其中 x 是您的运行级别。

你会看到一堆以 Sxx 或 Kxx 开头的文件。S 链接在启动时跟踪,而 K 链接在关闭时解析。这里的 xx 代表顺序。

但是设置这个顺序是有原因的,所以在改变它们时要小心。例如,ntpd 应该只在网络子系统初始化后启动。

答案2

除了像其他答案中建议的那样手动执行此操作外,您还可以更改 init 脚本。只需在标题中添加这样一行:

# chkconfig: 35 90 10

这将指示chkconfig将服务添加到运行级别 3 和 5,起始位置为 90,终止位置为 10。

答案3

如果您已经到达这里,则很可能您有两个服务,其中一个依赖于另一个,但由于它们的启动顺序错误,具有依赖关系的服务无法启动。关于编辑符号链接的建议很有用,可以说明启动顺序如何运行,并且可以正常工作,直到有人对您的服务执行“chkconfig on”,此时符号链接将重新创建为原始状态。实际上,您想在 init 脚本级别处理该问题,这实际上要简单得多。它也将在不同的运行级别中保持一致。您可能不需要像答案 4 中建议的那样添加“# chkconfig”行,因为那里可能已经有类似的行了。

我将使用运行 Openldap (slapd) 和 MySQL 数据库后端 (mysqld) 的服务器作为示例。配置该对以及您可能需要这样做的原因又是另外一个故事。

在启动时,Openldap 无法启动,因为它依赖于 MySQL,并且启动顺序要求它在它之前启动 - slapd 的位置为 27,而 mysqld 的位置为 64

/etc/rc3.d/ 中的相关符号链接是

S27slapd -> ../init.d/slapd 
and
S64mysqld -> ../init.d/mysqld

我查找两个初始化脚本中设置的值:

[root ~]# grep chkconfig /etc/rc.d/init.d/mysqld
# chkconfig: - 64 36

[root ~]# grep chkconfig /etc/rc.d/init.d/slapd
# chkconfig: - 27 73 

我编辑 /etc/rc.d/init.d/slapd 中的 chkconfig 行,使其起始位置高于 /etc/rc.d/init.d/mysqld 中的起始位置(我选择了 85)

[root ~]# grep chkconfig /etc/rc.d/init.d/slapd
# chkconfig: - 85 73

我执行“chkconfig slapd on”并重新检查符号链接

[root ~]# chkconfig slapd on
[root ~]# ls -l /etc/rc3.d/ | grep mysqld
lrwxrwxrwx  1 root root 16 Dec 10 13:45 S64mysqld -> ../init.d/mysqld
[root ~]# ls -l /etc/rc3.d/ | grep slapd
lrwxrwxrwx  1 root root 15 Apr 28 14:18 S85slapd -> ../init.d/slapd

现在,当该服务器启动时,mysqld 在 slapd 之前启动,并且一切正常。

答案4

您想了解一下运行级别和 rc.d 目录。在 rc.d 目录中,您可以找到 S 和 K 链接,例如 S20apache K10apache,它们基本上是命令脚本启动/关闭的。

这个架构上有一些变化,但是大多数 Linux 仍在使用它。

相关内容