Chkconfig 忽略服务依赖关系

Chkconfig 忽略服务依赖关系

所以我有这两个文件:

/etc/init.d
    - service1
    - service2

service2就好像:

#!/bin/sh
# chkconfig: 2346 95 45
# description: desc
# processname: service2

### BEGIN INIT INFO
# Provides:          service2
# Required-Start:    service1
# Required-Stop:     service1
# Default-Start:     2 3 4 6
# Default-Stop:      0 6
# Short-Description: desc
# Description:       long desc
### END INIT INFO
export JAVA_HOME="/opt/java/jre"
export PATH=$JAVA_HOME/bin:$PATH
/opt/do/something.sh $*

我希望在正常启动和重启时,在结束service2后启动service1(大约需要 12 分钟,这是一个应用服务器),但它们几乎同时启动,因此会中断service2

为什么服务系统会忽略我设置的依赖项?有什么问题吗?有没有办法检查启动顺序执行的正确性?

我在 RHEL7 上,两个服务都已成功添加

chkconfig --add <service_name>

谢谢

答案1

正如 Michael Hampton 在评论中提到的,你应该将旧式的 init 脚本转换为 systemd 单元

但是,您可能有理由继续使用旧式 SysVinit 脚本。

你的脚本可能存在一个问题:我似乎记得曾经有一项要求不能有空行在该### BEGIN INIT INFO线之前。

我无法在当前 LSB 标准文档但我记得我曾经通过删除 INIT INFO 部分之前的空白行解决了类似的问题。如果我的记忆正确的话,这也许可以解释为什么你的依赖关系没有被遵循。

此外,SysVinit 脚本中的依赖项不一定指实际服务,而只是指脚本本身:RHEL7将在脚本完成后立即systemd启动脚本,无论由脚本启动的实际服务进程是否已完成启动。因此,如果您的服务启动时间不短,则脚本应明确等到服务完全启动后再退出。service2service1service1

相关内容