別のサービスが開始された後にサービスを実行する

別のサービスが開始された後にサービスを実行する

MySQL NDB クラスターをインストールしました。クラスター ノード間でデータベースを同期するには、約 2 ~ 3 分かかります。同期が完了したら、ハートビートと呼ばれる別のアプリケーションを起動できます。したがって、シェル スクリプトで、ndbd サービスの可用性を常に確認します。このサービスが利用可能になったら、5 分以内にハートビート アプリケーションを起動する必要があります。スクリプトの作成を手伝っていただけますか。

答え1

「wait」bash 組み込みコマンドを使用することもできます。

「マン・バッシュ」より

待つ [名詞]

指定されたプロセスを待機し、その終了ステータスを返します。n はプロセス ID またはジョブ指定です。ジョブ指定が指定されている場合は、そのジョブのパイプラインにあるすべてのプロセスを待機します。n が指定されていない場合は、現在アクティブなすべての子プロセスを待機し、戻りステータスは 0 になります。n が存在しないプロセスまたはジョブを指定している場合、戻りステータスは 127 になります。それ以外の場合、戻りステータスは待機した最後のプロセスまたはジョブの終了ステータスになります。

スクリプトは次のようになります。

# send to background
./ndb_startup_script & 

# wait on pid of ndb_startup_script
wait $!

if [ $? -eq 0 ] # assuming 0 is ret code for successful run
then 
    ./heartbeat_startup_script
else 
    # extra stuff to handle error
fi

答え2

私がやりたいのは、ndb スクリプトに別のスクリプトを実行させて、5 分間待機して他のサービスの起動をブロックしないようにすることです。

## whatever starts ndb
exec heartbeat_startup_script

5 分を指定したので、ここでは sleep 300 (秒) を設定しましたが、ndb 同期が完了したかどうかを確認する方がはるかに良いでしょう。

##heartbeat_startup_script
sleep 300
heartbeat

関連情報