
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