2010-05-09 72 views
0

我想寫一個Python腳本,執行以下操作,從內部的微小的cronjob沒有響應:啓動一個http請求,但如果輟學一段時間

  1. 試圖執行一個url
  2. 如果沒有響應,則在10秒後放棄響應並立即通過os.system發出命令以重新啓動Web服務器。

問題是,當我的服務器崩潰時,它根本沒有返回響應。如果我只想讓我的腳本記錄響應時間,腳本將持續10分鐘或更長時間。我希望它在檢測到響應緩慢時立即發出重新啓動。我知道這樣的腳本可能寫入的代碼可能少於5個,但我不知道如何去做。

回答

3

從Python 2.6中您可以使用下面提供的超時時間以秒在調用的urlopen:

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

這設置超時只爲這個請求,而不是全局像使用socket.settimeout。但對於可能是您唯一選擇的較舊版本的Python。

2

使用settimeout()

我相信這將引發exception,所以才這樣做:

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

這裏有一個非Python的答案,適合分鐘-LY的cronjob:

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

如果捲曲取時間超過十秒鐘,它會報錯並退出。 bash「||」然後命令將會啓動,運行該命令以優雅地重啓Apache。也就是說,它會重新啓動,但保持當前連接運行。你需要visudo來啓用該命令從cron運行無密碼。

相關問題