続行する前に、Bashスクリプトにステータスメッセージを待つようにしてください。

続行する前に、Bashスクリプトにステータスメッセージを待つようにしてください。

私はbashスクリプトを使用してSeleniumサーバーを起動していますが、下のログのタイムスタンプに示すように、サーバーが完全にオンラインになるのに約32秒かかります。

Feb 28, 2012 10:19:02 PM org.openqa.grid.selenium.GridLauncher main
INFO: Launching a standalone server
22:19:02.835 INFO - Java: Sun Microsystems Inc. 20.0-b11
22:19:02.836 INFO - OS: Linux 2.6.32-220.4.1.el6.x86_64 amd64
22:19:02.852 INFO - v2.19.0, with Core v2.19.0. Built from revision 15849
22:19:02.988 INFO - RemoteWebDriver instances should connect to: http://127.0.0.1:4444/wd/hub
22:19:02.990 INFO - Version Jetty/5.1.x
22:19:02.992 INFO - Started HttpContext[/selenium-server/driver,/selenium-server/driver]
22:19:02.993 INFO - Started HttpContext[/selenium-server,/selenium-server]
22:19:02.993 INFO - Started HttpContext[/,/]
22:19:34.552 INFO - Started org.openqa.jetty.jetty.servlet.ServletHandler@488e32e7
22:19:34.552 INFO - Started HttpContext[/wd,/wd]
22:19:34.555 INFO - Started SocketListener on 0.0.0.0:4444
22:19:34.555 INFO - Started org.openqa.jetty.jetty.Server@7d29f3b5

サーバーの起動後に「sleep 32」コマンドを使用するのではなく(続行する前にスクリプトを遅らせるために)、続行する前にbashスクリプトが「Started SocketListener」文字列を表示するのを待ちます。それは可能ですか?

ベストアンサー1

tail -fファイルが大きくなると、読み続けることができます。食べることに注意してくださいtail -f。入力フィルタをパイプしtail -fて必要なログ行を待ってから終了できます。他のフィルタにパイプされる他のフィルタにパイプされている場合、tail -f中間フィルタは出力をバッファリングするため、機能しません。これは働きます:

: >file.log  # create an empty log file
start-selenium-session --log-file=file.log &
{ tail -n +1 -f file.log & } | sed -n '/Started SocketListener/q'
speak-to-socket

tail背景に入れたので参考にしてください。これは、必要な行が見つかると終了しますが、sedパイプラインはすぐには表示されない可能性がある次の行を待っている間実行され続けるためです。次の行が来て1つを受け取ると終了します。行を書かずにログを削除すると、間違ったプロセスが残る可能性があります(終了時にプロセスを終了するためにプロセスのPIDを取得することは可能ですが難しいです)。tailtailSIGPIPEtailtailsed

1ありがとうピーター以前のバージョンのバグを指摘します。

おすすめ記事