バックグラウンドでコマンドを実行し、特定のログ行を待ち、フォアグラウンドで新しいコマンドを実行します。

バックグラウンドでコマンドを実行し、特定のログ行を待ち、フォアグラウンドで新しいコマンドを実行します。

データベースが起動する前に、mssqlデータベースでいくつかのSQL文を実行したいと思います(これはdocker RUNステップの一部として発生します)。私が知っている限り、これを行う唯一の方法は、バックグラウンドでサーバーを起動して起動するのを待ってから、sqlファイルを実行してサーバーをシャットダウンすることです。

に基づいてこの問題私は次のようにうまくいきます:

/opt/mssql/bin/sqlservr & sleep 10 && /opt/mssql-tools/bin/sqlcmd -i whatever.sql && pkill sqlservr

問題は、sleep 10サーバーがゆっくり起動すると少し不安定で、早く起動すると待ち時間が追加されるという点だ。sleep 10セクションをコマンドの標準出力を監視/opt/mssql/bin/sqlservrし、特定のログ行が一致するまでブロックするように置き換える方法はありますか?

答え1

私はこのソリューションが以下に基づいて動作すると思います。このスーパーユーザーの答え:

( /opt/mssql/bin/sqlservr & ) | grep -q "Service Broker manager has started" && /opt/mssql-tools/bin/sqlcmd -i whatever.sql && pkill sqlservr

関連情報