bashスクリプトでサービスが開始するまで待つ 質問する

bashスクリプトでサービスが開始するまで待つ 質問する

バックグラウンドで何らかのサービスを開始する bash スクリプトがあります。このサービスが正常に開始されると、stdout に「Server is active」と出力されます。この文字列が表示されるまで待ってから、スクリプトの実行を続行する必要があります。どうすればこれを実現できますか?

ベストアンサー1

私ならこのようにします。

./server > /tmp/server-log.txt &
sleep 1
while ! grep -m1 'Server is active' < /tmp/server-log.txt; do
    sleep 1
done

echo Continue

ここでは最初の試合で辞めるように-m1指示します。grep(1)

私は以下のおもちゃの「サービス」で自分の答えを検証しました:

#! /bin/bash

trap "echo 'YOU killed me with SIGPIPE!' 1>&2 " SIGPIPE

rm -f /tmp/server-output.txt
for (( i=0; i<5; ++i )); do
    echo "i==$i"
    sleep 1;
done
echo "Server is active"
for (( ; i<10; ++i )); do
    echo "i==$i"
    sleep 1;
done
echo "Server is shutting down..." > /tmp/server-output.txt

echo Continueを に置き換えると、の出力の直後に「続行」アクションがトリガーされたことを証明する がecho Continue; sleep 1; ls /tmp/server-msg.txt表示されます。ls: cannot access /tmp/server-output.txt: No such file or directoryServer is active

おすすめ記事