我有一個連續處理新數據並寫入到mongodb的python腳本。在腳本中,它的一個while
循環和一個sleep
連續運行代碼。永遠運行Python腳本,記錄錯誤並在崩潰時重新啓動
建議如何永久運行Python腳本,發生錯誤時記錄錯誤,並在崩潰時重新啓動?
請問node.js的forever
是否合適?我也在同一臺Ubuntu服務器上運行node/meteor。
我有一個連續處理新數據並寫入到mongodb的python腳本。在腳本中,它的一個while
循環和一個sleep
連續運行代碼。永遠運行Python腳本,記錄錯誤並在崩潰時重新啓動
建議如何永久運行Python腳本,發生錯誤時記錄錯誤,並在崩潰時重新啓動?
請問node.js的forever
是否合適?我也在同一臺Ubuntu服務器上運行node/meteor。
最近寫了類似的東西。我遵循的基本模式是
while True:
try:
#functionality
except SpecificError:
#log exception
except: #catch everything else
finally:
time.sleep(600)
要處理重新啓動,您可以使用init.d或cron作業。
如果你正在寫一個守護進程,你應該使用這個命令做到這一點: http://manpages.ubuntu.com/manpages/lucid/man8/start-stop-daemon.8.html
您可以從System V的/etc/init.d/中的腳本產卵這一點,或使用新貴它正在慢慢取代它。
新貴:http://upstart.ubuntu.com/getting-started.html
系統V:http://www.cyberciti.biz/tips/linux-write-sys-v-init-script-to-start-stop-service.html
我發現系統V更容易寫,但如果這將永遠被打包並以Debian文件,我建議寫一個暴發戶的conf。
絕對保持睡眠狀態,這樣它就不會控制CPU負載。
supervisord是完美的這種事情。雖然我曾經檢查程序是否每012分鐘運行一次cron
作業,但supervisord會在進程內線程中運行所有程序,所以如果程序終止,supervisord會自動重啓進程。我不再需要分析ps
的輸出以查看程序是否崩潰。
它有一個簡單的聲明配置文件和可配置的日誌記錄。默認情況下,它爲your-program-name-stderr.log
your-program-name-stdout.log
創建一個日誌文件,當從OS軟件包管理器(我爲Debian)安裝supervisord時,這些文件將由logrotate自動處理。
如果你不想配置supervisord
的日誌記錄,你應該在python中看logging,這樣你就可以控制進入這些文件的內容。
如果您使用的是debian衍生產品,則只需通過以root身份執行apt-get install supervisord
即可安裝並啓動守護進程。
配置文件是非常簡單太:
[program:myprogram]
command=/path/to/my/program/script
directory=/path/to/my/program/base
user=myuser
autostart=true
autorestart=true
redirect_stderr=True
supervisorctl
也可以讓你看到你的程序交互做的和可以啓動和停止多個程序與supervisorctl start myprogram
等
你甚至需要啓動該節點/流星內的Python腳本?如果您只是通過數據庫進行交互,爲什麼不單獨啓動? –
@ChristianF python腳本不需要從node/meteor開始。我想也許node/meteor可以幫助管理python腳本。 – Nyxynyx