簡體   English   中英

如果沒有退出代碼0,如何使Shell腳本的一部分超時並重新運行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM