web-dev-qa-db-ja.com

別のUpstartジョブが停止する前に、1つのUpstartジョブが確実に停止するようにするにはどうすればよいですか?

サーバーがACPIシャットダウンを介してシャットダウンされることがあり、プロセスを正常にシャットダウンすることができました。ただし、プロセス(ジョブA)は正常なシャットダウン中に別のプロセス(ジョブB)に依存するため、ジョブAが停止するまでジョブBが停止しないことを確認したいと思います。

両方のプロセスはUpstartジョブであるため、これをジョブBの/ etc/initファイルに追加して、これを実行しようとしました。

# Don't stop until job A stops
pre-stop script
    while true
    do
        status A | grep -q "stop/waiting" && exit 0
        sleep 1
    done
end script

これはうまくいかないようです。 ACPIシャットダウンを介してサーバーをシャットダウンすると、通常、ジョブAの前にジョブBがシャットダウンするため、ジョブAはジョブBが起動していないというエラーメッセージを吐き出します。

スクリプトに何か問題がありますか?私が取るべき別のアプローチはありますか?または、Upstartで必要なことを実行できませんか?

関連質問: 依存関係の前にジョブを停止するにはどうすればよいですか?

5
Aaron

ジョブA内で次のオプションを使用できます。

  • 依存サービスの前に停止する

    stop on stopping B
    
  • 依存サービスの後に開始

    start on started B
    

リファレンス: http://upstart.ubuntu.com/cookbook/#stop-on

3
user.dz