启动http请求,但如果在一定时间后没有响应则退出

时间:2010-05-09 16:12:48

标签: python benchmarking

我正在尝试编写一个python脚本,从一个小小的cronjob中执行以下操作:

  1. 尝试执行网址
  2. 10秒后如果还没有响应,放弃响应并立即通过os.system发出命令重新启动网络服务器。
  3. 问题是当我的服务器崩溃时,它根本不会返回响应。如果我只是让我的脚本时间响应,脚本将持续10分钟或更长时间。我希望它在检测到响应缓慢后立即发出重启。我知道这样的脚本可能只用不到5个代码编写,但我不知道如何去做。

3 个答案:

答案 0 :(得分:3)

从Python 2.6开始,您可以使用以下内容,在调用urlopen时提供超时秒数:

urllib2.urlopen(url[, data][, timeout])

这仅为此请求设置超时,而不是像socket.settimeout那样全局设置。但对于旧版本的Python,这可能是您唯一的选择。

答案 1 :(得分:2)

使用settimeout()

我相信这会抛出一个exception,所以就这样做:

try:
   //all the magic you want
except socket.timeout:
   os.system(...)

答案 2 :(得分:2)

这是一个非Python的答案,适合一分钟的cronjob:

curl > /dev/null --silent --max-time 10 http://myserver.com || sudo /usr/sbin/apache2ctl graceful

如果卷曲提取时间超过十秒,它将退出并显示错误。 bash“||”然后命令将触发,运行该命令以正常重启Apache。也就是说,它会重新启动,但保持当前连接正在运行。您需要使用visudo才能使该命令从cron运行无密码。