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

Python 启动http请求,但如果在特定时间后没有响应,则会退出,python,benchmarking,Python,Benchmarking,我正在尝试编写一个python脚本,它在一个小作业中执行以下操作: curl > /dev/null --silent --max-time 10 http://myserver.com || sudo /usr/sbin/apache2ctl graceful 尝试执行url 10秒后,如果还没有响应,则放弃响应,并立即通过os.system发出命令以重新启动Web服务器。 问题是,当我的服务器崩溃时,它根本不返回响应。如果让我的脚本对响应计时,脚本将持续10分钟或更长时间。我希望它在

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

curl > /dev/null --silent --max-time 10 http://myserver.com || sudo /usr/sbin/apache2ctl graceful
尝试执行url 10秒后,如果还没有响应,则放弃响应,并立即通过os.system发出命令以重新启动Web服务器。 问题是,当我的服务器崩溃时,它根本不返回响应。如果让我的脚本对响应计时,脚本将持续10分钟或更长时间。我希望它在检测到响应缓慢时立即重新启动。我知道这样一个脚本可能只用不到5个代码段就可以编写,但我不知道该怎么做。

使用

我相信这会引发一场灾难,所以只要做:

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

在上的Python 2.6中,您可以使用以下命令,在调用urlopen时提供以秒为单位的超时:

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

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

这里有一个非Python的答案,适用于一个简单的工作:

curl > /dev/null --silent --max-time 10 http://myserver.com || sudo /usr/sbin/apache2ctl graceful
如果curl fetch花费的时间超过10秒,它将退出并出错。然后,bash | |命令将启动,运行该命令以优雅地重新启动Apache。也就是说,它将重新启动,但保持当前连接运行。您需要执行visudo以使该命令能够从cron运行无密码