[英]How to timeout part of a shell script and re-run it if no exit code 0
我有一個具有第一行的shell腳本(在#! /bin/sh
):
IP=$(curl ifconfig.me)
有時腳本會在3秒鍾內執行並在其他時間完成,否則腳本會在此點超時(我知道,因為我使用notify-send在下一行顯示IP)。
通常,我將不得不多次運行腳本才能完成腳本(我使用CTRL + C進行中斷)。
我希望能夠運行一次腳本,如果它在10秒鍾內還沒有完成,它會退出並再次運行,並不斷循環直到它在10秒的時間內獲得退出代碼0,或者解決原因為什么它不僅在第一輪完成。
我已經看到許多其他解決方案來延長超時時間,但是我沒有看到任何對我有意義的指令,因此無法實現它們。 例如這個 。
我當時想嘗試一下ulimit版本,因為我現在比以前更加熟悉python,但是我不確定使用腳本來運行腳本是有意義的。
我嘗試使用睡眠,但是我似乎只能做的是暫停運行腳本,因此該腳本永遠無法完成。
腳本的其余部分為iptables
設置規則。
您需要做的是定制您正在使用的curl命令。 有許多選項可能會有所幫助:
curl --connect-timeout 3 --max-time 10 --retry 3 ifconfig.me
這告訴curl命令如果在3秒鍾內未建立連接就超時,如果完整的數據傳輸花費10秒鍾以上則超時,並且將重試3次。 適當調整!
您還可以設置其他一些參數,同時檢查手動彎曲。
您應該使用curl --max-time
選項。 如果未在指定的秒數內完成,它將失敗。
您可以使用coreutils中的timeout
命令
while ! IP=$(timeout 3 curl ifconfig.me)
do
sleep 1
done
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.