[英]python restart after unexpected exit with `while true` loop
我寫了一個Python腳本,它的while true
來執行任務以捕獲電子郵件的附件,但是有時我發現它會在服務器上意外退出。
我可以在我的本地計算機上運行4個多小時而沒有問題,因此可以確認代碼正確無誤。
那么,有一種機制可以在異常退出時重新啟動python,例如進程監視嗎? 我是linux的新手。
備注:l在外殼程序腳本中運行此python腳本,如python attachment.py &
。
雖然@triplee的評論肯定可以解決問題,但我擔心會發生某些事情,您可能會有所了解。 也就是說,腳本失敗的原因。
沒有更多細節,很難推測可能會發生什么。 作為第一個調試工作,您可以嘗試在try ... except...
塊中將while True
換行內包裹整個主體,然后使用except
塊記錄錯誤和/或程序狀態。 那是,
while True:
try:
... do some stuff...
except:
... log the exception, print to screen, record the values of key variables, etc.
continue
這將使您了解故障期間發生的情況,並編寫處理該事件的更強大的代碼。
您可以嘗試使用Supervisor來管理您的過程。 主管可以配置進程退出狀態的行為並嘗試重新啟動它。
示例配置
[program:nodehook]
command=/usr/bin/node /srv/http.js
directory=/srv
autostart=true
autorestart=true
startretries=3
stderr_logfile=/var/log/webhook/nodehook.err.log
stdout_logfile=/var/log/webhook/nodehook.out.log
user=www-data
environment=SECRET_PASSPHRASE='this is secret',SECRET_TWO='another secret
我可以在我的本地計算機上運行4個多小時而沒有問題,因此可以確認代碼正確無誤。
您可能會驚訝地發現,如果不是經過數年的正確處理,幾個月后才會發現的錯誤數量……您確認的是,代碼不會在第一次操作時就中斷,但是除非您在輸入中使用了所有可能的極端情況進行了測試, (包括格式錯誤的文件),您無法確認它永遠不會損壞。
這就是為什么應謹慎設計旨在無人照管運行的程序,以便始終(嘗試* )在退出之前留下痕跡。 try: except:
和logging
模塊是您最好的朋友。
*如果發生系統崩潰或斷電,則無法在用戶程序級別執行任何操作...
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.