我有一个shell脚本,第一行(#! /bin/sh
之后):
IP=$(curl ifconfig.me)
有时脚本将在3秒内执行并在3秒内完成,此时它会在脚本中超时(我知道因为我使用notify-send在下一行显示IP)。
我经常需要多次运行脚本才能完成它(我使用CTRL + C来中断)。
我希望能够运行一次脚本,如果它在10秒内没有完成,它会退出并再次运行,并保持循环,直到它在10秒的时间范围内得到退出代码0,或者解决为什么它不仅仅是第一次完成的原因。
我已经看到许多其他解决方案可以暂停,但我没有看到任何对我有意义的指令,因此无法实现它们。例如this one。
我正在考虑尝试使用ulimit版本,因为我现在比以前对python更有经验但是我不确定使用脚本来运行脚本是否有意义。
我尝试过使用睡眠,但我似乎只是让它暂停运行脚本,因此它永远不会完成。
脚本的其余部分为iptables
设置规则。
答案 0 :(得分:3)
您需要做的是定制您正在使用的curl命令。有许多选项可能会有所帮助:
curl --connect-timeout 3 --max-time 10 --retry 3 ifconfig.me
如果连接未在3秒内建立,则告知curl命令超时,如果完整数据传输超过10秒,它将超时,并且将重试3次。适当调整!
您可以设置一些其他参数,也可以检查人的卷曲。
答案 1 :(得分:1)
您应该使用curl --max-time
选项。如果它在指定的秒数内没有完成,它将失败。
答案 2 :(得分:0)
您可以使用coreutils的timeout
命令
while ! IP=$(timeout 3 curl ifconfig.me)
do
sleep 1
done