2016-08-30 38 views
0

我正在解決以下問題:在腳本崩潰之前調用函數?

我有一個應該作爲服務24/7運行的腳本。因爲它非常重要,所以我希望它發送一封電子郵件以防萬一它崩潰。我發現atexit模塊,但文檔明確指出它不能處理崩潰。

所以我的問題是:是否有任何更好的方法來實現這個比運行另一個serivce將檢查如果這是運行?或者這裏的目標是編寫服務,以便它不會崩潰(這幾乎是不可能的)?

感謝您的想法!

+0

崩潰-Y這是怎麼崩潰了?我們在這裏談論未處理的異常,還是像段錯誤?如果出現未處理的異常,'atexit'退出處理程序仍將運行。 – user2357112

+0

你不能處理所有類型的崩潰,因爲它們中的一些像所提到的segfault或SIGTERM一樣是「不可捕捉的」。你可以做的是使用像[supervisor](http://supervisord.org/index.html)這樣的外部工具,它將處理你的啓動/重新啓動並使用它的[events](http://supervisord.org/events .html),您可以聽取進入「FATAL」狀態的流程以發送電子郵件。將進程監視到同一進程中的嵌入機制是有風險的。 – Yakuza

+0

我會看看主管工具,它似乎是唯一正確的方法。謝謝 – karlosss

回答

0

我的意思是做你在第一部分所要求的只是用腳本包裝腳本的主要部分。

myscript.py:

def main(): 
    long_running_process() 

if __name__ == '__main__': 
    try: 
     main() 
    except: 
     send_email() 
+0

如果出現分段錯誤,則無法工作。 – karlosss

+0

然後像上面說的,你需要像supervisor,upstart,init.d等一些服務監視器。 – postelrich