服務啟動超時控制
問題描述:
服務有時存在等待很長時間起不來的情況,需要手動kill掉行程,然后再起一遍,
1 使用timeout指定命令運行的超時時間
timeout 30s java -jar while-1.0-SNAPSHOT.jar
腳本
#!/bin/bash
timeout 30s java -jar while-1.0-SNAPSHOT.jar
exit_pid=$? # 不在這里賦值的話,$?的值就會消失
echo "$? $exit_pid" # 這里的$?的值為0
if [[ $exit_pid == 124 ]];then
echo "使用exit_pid變數接住退出值,$exit_pid" # 這里使用變數的值就可以正常使用timeout的退出值
fi

日期輸出是timeout 后面的jar包輸出的,while.jar死回圈輸出當前的系統時間,
最后的test ? = 124是最后的輸出
timeout 超過30s的時候,會把后面執行的jar包的行程給殺掉.可以在腳本運行時和運行后分別通過ps查看while行程是否存在,
ps -ef | grep while
2 使用timeout的退出值


timeout 10s java -jar while-1.0-SNAPSHOT.jar超時退出的狀態碼 是124
timeout -s 9 10s java -jar while-1.0-SNAPSHOT.jar超時退出的狀態碼 是137
timeout -s 15 10s java -jar while-1.0-SNAPSHOT.jar超時退出的狀態碼 是124,所以默認使用的是kill -15,退出超時的行程,
$?需要在退出行程之后,立馬使用變數接住這個值,否則之后$?的值就會消失,
使用$?的退出值
#!/bin/bash
timeout -s 15 10s java -jar while-1.0-SNAPSHOT.jar
exit_pid=$? # 不在這里賦值的話,$?的值就會消失
echo "$? $exit_pid" # 這里的$?的值為0
if [[ $exit_pid == 124 ]];then
echo "使用exit_pid變數接住退出值,$exit_pid" # 這里使用變數的值就可以正常使用timeout的退出值
fi

注意:下面的使用方式是不會產生作用的
#!/bin/bash
aaa=`timeout -s 15 10s java -jar while-1.0-SNAPSHOT.jar` # 試圖用aaa接收timeout的退出值
echo "$aaa" # 沒有獲取到,是空
exit_pid=$?
echo "$? $exit_pid" # 只有這兩個值 0 0,成功回傳是0,0表示的echo命令執行成功
if [[ $exit_pid == 124 ]];then
echo "使用exit_pid變數接住退出值,$exit_pid"
fi

以上腳本經過驗證,
本文來自博客園,作者:永恒&,轉載請注明原文鏈接:https://www.cnblogs.com/Sun-yuan/p/17353962.html
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/551181.html
標籤:其他
上一篇:OGC標準介面學習
下一篇:返回列表
