所以我有这两个文件:
/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
启动脚本,无论由脚本启动的实际服务进程是否已完成启动。因此,如果您的服务启动时间不短,则脚本应明确等到服务完全启动后再退出。service2
service1
service1