2013-10-02 24 views
1

我開發的二進制Debian軟件包我的應用程序服務器。因此我需要爲它開發postinst和prerm腳本。在prerm中安裝新包之前,我應該停止服務。我發現我不能使用哪種情況可能發生invoke-rc.d將失敗,但服務不會?

service myservice stop 

在prerm,我應該使用調用-rc.d的而不是將其作爲後續

invoke-rc.d myservice stop 

這commond總是由這種失敗:

Invoke-rc.d: initscript myservice, action "stop" failed 
當我想安裝deb包

。我也是通過開始測試它的,並且我在開始操作時遇到了同樣的錯誤。

奇怪的是,服務(myservice)正常工作時,我沒有任何問題或故障使用sudo service myservice start/stop

任何人都可以解釋爲什麼invoke-rc.d命令不工作,但service命令工作?

回答

1

很難不上的腳本性質的任何信息說,但invoke-rc.dservice下運行之間的主要區別是,

  1. invoke-rc.d嘗試檢查服務是否應該運行,給當前運行級別和初始化腳本政策(/usr/sbin/policy-rc.d)任何系統,而service只是做你告訴它;和
  2. service清除掉大部分環境變量,並設置工作目錄爲/,努力使執行環境重複性/可預測的,因爲它可以。 invoke-rc.d沒有。

所以你應該看看你當前的環境或工作目錄或運行級別如何影響initscript。嘗試直接運行它(/etc/init.d/myservice stop),並嘗試與(例如,bash的-x選項:bash -x /etc/init.d/myservice stop)有些外殼調試參數運行它。

相關問題