我不确定它应该在stackoverflow或serverfault中。我在这里发帖是因为它可能是编程问题。
我有这个无限循环:
#!/bin/bash
MESSAGE="XXX0"
RESULT=`curl "http://somepage.php?thread=0"`
while :
do
if [[ "$RESULT" == "DONE" ]]
then
RESULT=`curl "http://somepage.php?thread=0"`
elif [[ "$RESULT" == "NONE" ]]
then
sleep 5
RESULT=`curl "http://somepage.php?thread=0"`
else
printf "%s %s\n" "$(date --rfc-3339='seconds'): ELSE1-" "$RESULT" >> /var/log/XXX/loopXXX-`date --rfc-3339='date'`
sleep 5
RESULT=`curl "http://somepage.php?thread=0"`
if [[ "$RESULT" == "DONE" ]]
then
RESULT=`curl "http://jsomepage.php?thread=0"`
elif [[ "$RESULT" == "NONE" ]]
then
sleep 5
RESULT=`curl "http://somepage.php?thread=0"`
else
printf "STOP"
break
fi
fi
done
我有3个循环执行相同的工作并请求线程0到2.在DBtable的PHP页面请求中,有一个列线程。所以这三个循环查询同一个表(读/写)但从不相同的行。
我遇到的问题是,在某些夜晚(几乎没有活动),一个循环不会在几个小时内请求页面(我在NGINX访问日志中检查过)。这种情况有时只会发生,而且服务器的功能比实际需要的还要强大。
使用curl的无限循环有问题吗?总共我有大约10个循环(不同的页面/表),但它们有10s睡眠而不是5s。
我的脚本中有内存/卷曲问题吗?你有没有经历过类似的事情?
谢谢!
答案 0 :(得分:1)
其中一条curl
行的执行时间可能比预期的要长。
您应该使用curl
's --max-time
parameter来限制任何单次执行的持续时间。它预计秒。
e.g。
RESULT=`curl --max-time 10 "http://somepage.php?thread=0"`
请注意,您现在可能会遇到失败,而您却看到了长时间的延迟。检查输出可能对您的应用程序来说是令人满意的,但返回代码是启示的途径。您甚至可能希望在shebang中使用“-e
”选项和/或创建一个与trap
ERR
一起使用的处理程序。
答案 1 :(得分:0)
尝试为每个curl命令设置最大超时,以防止它们挂起。例如:
curl -m 50 ...