我想寫一個Python腳本,執行以下操作,從內部的微小的cronjob沒有響應:啓動一個http請求,但如果輟學一段時間
- 試圖執行一個url
- 如果沒有響應,則在10秒後放棄響應並立即通過os.system發出命令以重新啓動Web服務器。
問題是,當我的服務器崩潰時,它根本沒有返回響應。如果我只想讓我的腳本記錄響應時間,腳本將持續10分鐘或更長時間。我希望它在檢測到響應緩慢時立即發出重新啓動。我知道這樣的腳本可能寫入的代碼可能少於5個,但我不知道如何去做。
我想寫一個Python腳本,執行以下操作,從內部的微小的cronjob沒有響應:啓動一個http請求,但如果輟學一段時間
問題是,當我的服務器崩潰時,它根本沒有返回響應。如果我只想讓我的腳本記錄響應時間,腳本將持續10分鐘或更長時間。我希望它在檢測到響應緩慢時立即發出重新啓動。我知道這樣的腳本可能寫入的代碼可能少於5個,但我不知道如何去做。
從Python 2.6中您可以使用下面提供的超時時間以秒在調用的urlopen:
urllib2.urlopen(url[, data][, timeout])
這設置超時只爲這個請求,而不是全局像使用socket.settimeout。但對於可能是您唯一選擇的較舊版本的Python。
我相信這將引發exception,所以才這樣做:
try:
//all the magic you want
except socket.timeout:
os.system(...)
這裏有一個非Python的答案,適合分鐘-LY的cronjob:
curl > /dev/null --silent --max-time 10 http://myserver.com || sudo /usr/sbin/apache2ctl graceful
如果捲曲取時間超過十秒鐘,它會報錯並退出。 bash「||」然後命令將會啓動,運行該命令以優雅地重啓Apache。也就是說,它會重新啓動,但保持當前連接運行。你需要visudo來啓用該命令從cron運行無密碼。