簡體   English   中英

python通過`while true`循環意外退出后重新啟動

[英]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來管理您的過程。 主管可以配置進程退出狀態的行為並嘗試重新啟動它。

隨附的是官方文檔Ubuntu中示例

示例配置

[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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM