Service

Chkconfig 忽略服務依賴

  • August 2, 2018

所以我有這兩個文件:

/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>

謝謝

正如 Michael Hampton 在評論中提到的,您應該將舊式 init 腳本轉換為 systemd units

但是,您可能有理由繼續使用舊式 SysVinit 腳本。

您的腳本中可能存在一個問題:我似乎記得曾經有一個要求,即行前不能有空### BEGIN INIT INFO行。

我在目前的 LSB 標准文件中找不到該要求,但我認為我曾經通過刪除 INIT INFO 部分之前的空白行解決了類似的問題。如果我的記憶是正確的,這可以解釋為什麼不遵循您的依賴關係。

另外,SysVinit 腳本中的依賴不一定指實際的服務,而只是指腳本本身:RHEL7systemd會在腳本完成service2後立即啟動service1腳本,而不管實際啟動的服務程序service1是否完成啟動向上與否。因此,如果您的服務需要很長時間才能啟動,則腳本應明確等待服務完全啟動後再退出。

引用自:https://serverfault.com/questions/924620