我想檢查一下tomcat服務器是否真的啟動了。當你啟動 tomcat 時,你會在catalina.out. 一旦我得到這個,腳本應該繼續。
這是我的代碼
echo "Waiting for Tomcat"
if [ $(tail -f /home/0511/myapp/logs/catalina.out | grep "Server startup" | wc -l) -eq 1 ]; then
echo "Tomcat started"
fi
#further code...
輸出:
Waiting for Tomcat
|
所以,我敢肯定,在 30-60 秒后,“ tail .. | wc -l”得到 1。但是,我無法將它與上面的代碼匹配。什么都沒有發生,我必須按 CTRL C 中斷。
我的意圖有什么問題或有更好的解決方案嗎?
uj5u.com熱心網友回復:
嘗試這個:
while true;do
if tail -n 100 /home/0511/myapp/logs/catalina.out | grep -q "Server
startup";then
echo "Tomcat started"
exit 0
fi
done
因此,您不斷檢查日志中的最后 100 行,如果匹配,則退出并顯示一條訊息。
另一個(更優雅)沒有回圈的解決方案:
if tail -f /home/0511/myapp/logs/catalina.out | grep -q "Server
startup";then
echo "Tomcat started"
fi
uj5u.com熱心網友回復:
你說“我想檢查一下tomcat服務器是否真的啟動了”。如果您使用 tail 和 grep 檢查日志,在最壞的情況下,您可以檢測到以崩潰結束的舊啟動。
Tomcat 服務器在啟動時正在偵聽某個埠(例如 8080)。因此,您應該檢查 Tomcat 服務器是否正在偵聽該埠。
如果您使用不同的埠,請將以下行中的 8080 替換為您的自定義埠。
為了顯示 tomcat 狀態,您應該使用 netstat。netstat 回傳的行示例:
TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING
為了僅顯示 Tomcat 是否啟動,您可以使用:
netstat -an|grep -e ":8080[^0-9].*[0-9].*LISTENING" && echo "Tomcat started" || echo "Tomcat not started"
grep 運算式匹配“:”后跟埠 8080,后跟非數字,后跟任意字符,后跟數字,后跟任意字符,后跟“LISTENING”。
為了等待 Tomcat,您可以使用:
echo Waiting for Tomcat port to be ...
until netstat -an | grep -e ":8080[^0-9].*[0-9].*LISTENING" > /dev/null ; do
sleep 1 ;
done
echo Tomcat started
uj5u.com熱心網友回復:
grep一旦找到匹配項就不會退出;它會繼續閱讀以進行進一步的比賽。
要不產生grep任何輸出,而是在找到匹配項后立即以 0 狀態退出,請使用以下-q選項:
if [ tail -f /home/0511/myapp/logs/catalina.out | grep -q "Server startup" ]; then
也就是說,日志訊息并不是檢查服務器是否真正啟動和服務的最可靠方法。相反,您可以嘗試,例如,反復輪詢它curl。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/522990.html
標籤:重击壳
