私の本当の目標は、リモートサーバーにSSH接続してTomcatを再起動して使用するスクリプトをローカルで実行することです。 expect
「Server startup in」メッセージを待つか、起動に失敗したことがわかった場合はゼロ以外の値で終了します。私の試みはこのスクリプトです。私はデバッグにlocalhostを使用していますが、「起動に失敗しました」ではなくINFOを使用して人為的に終了させます。
ssh -T localhost <<SSH_EOF
docker restart app
expect <<EXPECT_EOF
set timeout 30
spawn docker logs --since 1s -f app
expect_before "INFO" { exit 1 }
expect "Server startup in"
EXPECT_EOF
if [[ $? -eq 0]]; then
echo "Success!"
else
echo "Failed!"
fi
SSH_EOF
スクリプトは最初のINFOメッセージで終了しますが、Successと表示されます。なぜ1で終了しないのでしょうか。
私は試してみました
—
Dave
-d
フラグが、それはまだ素晴らしいヒントです。 INFOは間違いなく最初に見られます。出力の一番最初の行は 26-Jan-2019 17:51:32.070 INFO [main] org.apache.catalina.startup.VersionLoggerListener.log Server version name: Apache Tomcat/9.0.14
すぐに終了すると期待して $?
すでに '0'に解決されています(受け入れられた回答を参照)。
expect -d
詳細ログを表示するには、最初に表示される "INFO"または "Server startup in"のいずれかです。