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

由于标题中的问题很明显,我如何更改Linux服务启动/启动顺序?

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

你会看到一堆以Sxx或Kxx开头的文件。 S链接在启动过程中被跟踪,而K个链接被parsing为closures。 这里的xx代表顺序。

但是这个顺序是有原因的,所以在改变它的时候要小心。例如。 ntpd只有在networking子系统初始化后才能启动。

像其他答案中所build议的那样,您可以改变init脚本,而不是像手动那样做。 只需将这样一行添加到标题中:

# chkconfig: 35 90 10 

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

你想读一些你的runlevels和rc.d目录。 在rc.d目录里面你可以findS和K链接,就像S20apache K10apache一样,这个命令基本上是启动/closures脚本的命令。

这个架构有一些变化,但大部分的linux仍在使用它。

如果你到达这里,你有两种服务依靠另一种服务的机会,但是由于它们是从错误的顺序开始的,所以依赖的服务没有启动。 关于编辑符号链接的build议是提供信息的,就说明启动顺序是如何运行的,并且可以正常工作,直到有人在服务上执行了“chkconfig on”为止,此时符号链接将按原来的方式重新创build。 真的,你想在初始化脚本层次上处理这个问题,这实际上不太麻烦。 在不同的运行级别上也是一致的。 您可能不需要添加一个“#chkconfig”行,如答案4所示,因为那里可能会有类似的行。

我将使用运行OpenLDAP(slapd)的服务器和MySQL数据库后端(mysqld)的示例。 configuration这对,以及为什么你可能想要,是一个完整的故事。

在启动时,OpenLDap无法启动,因为它依赖于MySQL,启动顺序试图在启动之前启动 – slapd的位置是27,mysqld的位置是64

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

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

我查找在两个init脚本中设置的值:

 [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(我select了85)

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

我做“chkconfig slapd”并重新检查符号链接

 [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之前启动,并且与世界一切正常。