服務啟動超時控制 問題描述: 服務有時存在等待很長時間起不來的情況,需要手動kill掉進程,然後再起一遍。 1 使用timeout指定命令運行的超時時間 timeout 30s java -jar while-1.0-SNAPSHOT.jar 腳本 #!/bin/bash timeout 30s j ...
服務啟動超時控制
問題描述:
服務有時存在等待很長時間起不來的情況,需要手動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