我正在尝试编写一个python脚本,从一个小小的cronjob中执行以下操作:
问题是当我的服务器崩溃时,它根本不会返回响应。如果我只是让我的脚本时间响应,脚本将持续10分钟或更长时间。我希望它在检测到响应缓慢后立即发出重启。我知道这样的脚本可能只用不到5个代码编写,但我不知道如何去做。
答案 0 :(得分:3)
从Python 2.6开始,您可以使用以下内容,在调用urlopen时提供超时秒数:
urllib2.urlopen(url[, data][, timeout])
这仅为此请求设置超时,而不是像socket.settimeout那样全局设置。但对于旧版本的Python,这可能是您唯一的选择。
答案 1 :(得分:2)
我相信这会抛出一个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运行无密码。