1

アプリケーションサーバー用のバイナリ debian パッケージを開発しています。したがって、postinst および prerm スクリプトを開発する必要があります。prerm に新しいパッケージをインストールする前に、サービスを停止する必要があります。使えないことがわかりました

service myservice stop

次のように代わりにinvoke-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か?

4

1 に答える 1

1

スクリプトの性質に関する情報なしで言うのは難しいですが、実行中のinvoke-rc.dとの主な違いは次のserviceとおりです。

  1. invoke-rc.d現在のランレベルとシステムの initscript ポリシー ( /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)。

于 2013-10-02T22:03:04.683 に答える