我們用Python定時跑一些自動化程序的時候會出現程序崩潰的情況。此時如果你本人不在電腦面前,或者沒有留意到程序的崩潰,沒有及時重新拉起程序,會造成或大或小的損失。
本文將教你如何在 Windows 下使用 Supervisor 重新拉起崩潰的Python程序。
1.準備
開始之前,你要確保Python和pip已經成功安裝在電腦上,如果沒有,可以訪問這篇文章:超詳細Python安裝指南 進行安裝。
**(可選1) **如果你用Python的目的是數據分析,可以直接安裝Anaconda:Python數據分析與挖掘好幫手—Anaconda,它內置了Python和pip.
**(可選2) **此外,推薦大家用VSCode編輯器,它有許多的優點:Python 編程的最好搭檔—VSCode 詳細指南。
請選擇以下任一種方式輸入命令安裝依賴 :
- Windows 環境 打開 Cmd (開始-運行-CMD)。
- MacOS 環境 打開 Terminal (command+空格輸入Terminal)。
- 如果你用的是 VSCode編輯器 或 Pycharm,可以直接使用界面下方的Terminal.
pip install supervisor-win
如果你出現 “DLL load failed: 找不到指定的程序” 的報錯,請重新安裝pywin32:
pip install pywin32==223
2.編寫自重啟配置
接下來,你需要編寫一個讓你的Python程序自動運行,遇到報錯自動重啟的配置:
[program:cancel]
command=G:Anaconda3envs dx_easytraderpython.exe D://CODE//tdx_easytrader//dataserver.py
[supervisord]
nodaemon=true
[supervisorctl]
前兩行就是你的程序運行命令,在上面的例子中,program: 后面的關鍵詞是你自定義的程序名,我的Python位于:
G:Anaconda3envstdx_easytraderpython.exe
我想要自重啟的腳本位于:
D://CODE//tdx_easytrader//dataserver.py
此外,后面的三行是必須配置的,按我的默認寫法即可。
編寫完成后將配置命名為 supervisord.conf 保存于任何地方,可以是項目目錄下,也可以是一個重要的配置目錄文件夾。
然后執行以下命令啟動 supervisord:
supervisord -c D:CODEtdx_easytradersupervisord.conf
注意 -c 參數后就是你的 supervisord.conf 的絕對路徑。啟動完畢顯示:
2022-06-27 19:58:54,809 INFO process group added: 'cancel'
2022-06-27 19:58:54,810 INFO supervisord started with pid 28472
2022-06-27 19:58:54,815 INFO Spawned: 'cancel' with pid 27220
2022-06-27 19:58:55,830 INFO success: cancel entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
意思是,supervisord 進程已經啟動,pid為28472。我命名為cancel的Python進程也已經啟動,pid為27220。我們在任務管理器中可以查看到這兩個進程:
3.測試
接下來我們測試一下它能否自動重啟,讓我們強殺 27220 這個進程,觀察終端輸出:
2022-06-27 19:58:54,815 INFO Spawned: 'cancel' with pid 27220
2022-06-27 19:58:55,830 INFO success: cancel entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
2022-06-27 20:02:58,077 INFO exited: cancel (exit status 1; not expected)
2022-06-27 20:02:58,590 INFO Spawned: 'cancel' with pid 16640
2022-06-27 20:02:59,603 INFO success: cancel entered RUNNING state, process has stayed up for > than 1 seconds (startsecs)
可以看到, 20:02:58秒的時候 cancel 程序意外退出(exit status 1; not expected),然后supervisord重新幫我們拉起了一個cancel程序,pid為16640:
測試成功,程序成功自重啟。
Supervisor不僅會把日志輸出到終端中,在你運行命令的目錄中,它還會生成supervisord.log, 這里面也保存了所有運行日志:
當然,在上方我們supervisord的配置里,你也能配置日志輸出位置、最大大小、分片數量等:
[supervisord]
logfile = /tmp/supervisord.log
logfile_maxbytes = 50MB
logfile_backups=10
loglevel = info
pidfile = /tmp/supervisord.pid
-
WINDOWS
+關注
關注
3文章
3541瀏覽量
88626 -
程序
+關注
關注
117文章
3785瀏覽量
81004 -
Supervisor
+關注
關注
0文章
54瀏覽量
12480 -
python
+關注
關注
56文章
4792瀏覽量
84628
發布評論請先 登錄
相關推薦
評論