我們用Python定時(shí)跑一些自動(dòng)化程序的時(shí)候會(huì)出現(xiàn)程序崩潰的情況。此時(shí)如果你本人不在電腦面前,或者沒(méi)有留意到程序的崩潰,沒(méi)有及時(shí)重新拉起程序,會(huì)造成或大或小的損失。
本文將教你如何在 Windows 下使用 Supervisor 重新拉起崩潰的Python程序。
1.準(zhǔn)備
開(kāi)始之前,你要確保Python和pip已經(jīng)成功安裝在電腦上,如果沒(méi)有,可以訪問(wèn)這篇文章:超詳細(xì)Python安裝指南 進(jìn)行安裝。
**(可選1) **如果你用Python的目的是數(shù)據(jù)分析,可以直接安裝Anaconda:Python數(shù)據(jù)分析與挖掘好幫手—Anaconda,它內(nèi)置了Python和pip.
**(可選2) **此外,推薦大家用VSCode編輯器,它有許多的優(yōu)點(diǎn):Python 編程的最好搭檔—VSCode 詳細(xì)指南。
請(qǐng)選擇以下任一種方式輸入命令安裝依賴 :
- Windows 環(huán)境 打開(kāi) Cmd (開(kāi)始-運(yùn)行-CMD)。
- MacOS 環(huán)境 打開(kāi) Terminal (command+空格輸入Terminal)。
- 如果你用的是 VSCode編輯器 或 Pycharm,可以直接使用界面下方的Terminal.
pip install supervisor-win
如果你出現(xiàn) “DLL load failed: 找不到指定的程序” 的報(bào)錯(cuò),請(qǐng)重新安裝pywin32:
pip install pywin32==223
2.編寫(xiě)自重啟配置
接下來(lái),你需要編寫(xiě)一個(gè)讓你的Python程序自動(dòng)運(yùn)行,遇到報(bào)錯(cuò)自動(dòng)重啟的配置:
[program:cancel]
command=G:Anaconda3envs dx_easytraderpython.exe D://CODE//tdx_easytrader//dataserver.py
[supervisord]
nodaemon=true
[supervisorctl]
前兩行就是你的程序運(yùn)行命令,在上面的例子中,program: 后面的關(guān)鍵詞是你自定義的程序名,我的Python位于:
G:Anaconda3envstdx_easytraderpython.exe
我想要自重啟的腳本位于:
D://CODE//tdx_easytrader//dataserver.py
此外,后面的三行是必須配置的,按我的默認(rèn)寫(xiě)法即可。
編寫(xiě)完成后將配置命名為 supervisord.conf 保存于任何地方,可以是項(xiàng)目目錄下,也可以是一個(gè)重要的配置目錄文件夾。
然后執(zhí)行以下命令啟動(dòng) supervisord:
supervisord -c D:CODEtdx_easytradersupervisord.conf
注意 -c 參數(shù)后就是你的 supervisord.conf 的絕對(duì)路徑。啟動(dòng)完畢顯示:
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 進(jìn)程已經(jīng)啟動(dòng),pid為28472。我命名為cancel的Python進(jìn)程也已經(jīng)啟動(dòng),pid為27220。我們?cè)谌蝿?wù)管理器中可以查看到這兩個(gè)進(jìn)程:
3.測(cè)試
接下來(lái)我們測(cè)試一下它能否自動(dòng)重啟,讓我們強(qiáng)殺 27220 這個(gè)進(jìn)程,觀察終端輸出:
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秒的時(shí)候 cancel 程序意外退出(exit status 1; not expected),然后supervisord重新幫我們拉起了一個(gè)cancel程序,pid為16640:
測(cè)試成功,程序成功自重啟。
Supervisor不僅會(huì)把日志輸出到終端中,在你運(yùn)行命令的目錄中,它還會(huì)生成supervisord.log, 這里面也保存了所有運(yùn)行日志:
當(dāng)然,在上方我們supervisord的配置里,你也能配置日志輸出位置、最大大小、分片數(shù)量等:
[supervisord]
logfile = /tmp/supervisord.log
logfile_maxbytes = 50MB
logfile_backups=10
loglevel = info
pidfile = /tmp/supervisord.pid
-
WINDOWS
+關(guān)注
關(guān)注
4文章
3603瀏覽量
90886 -
程序
+關(guān)注
關(guān)注
117文章
3819瀏覽量
82348 -
Supervisor
+關(guān)注
關(guān)注
0文章
54瀏覽量
12800 -
python
+關(guān)注
關(guān)注
56文章
4823瀏覽量
86110
發(fā)布評(píng)論請(qǐng)先 登錄
FX2LP如何在不更改硬件的情況下對(duì)其進(jìn)行重新編程?
Windows 8.1中的安裝崩潰
在windows下安裝python 在linux下安裝python 在masOS下安裝python
如何在WINDOWS系統(tǒng)下使用tensorflow來(lái)下圍棋呢
有誰(shuí)知道wroom的開(kāi)發(fā)板版本如何在不拉起捆扎針的情況下將引導(dǎo)加載程序置于串行模式?
有誰(shuí)知道wroom的開(kāi)發(fā)板版本如何在不拉起捆扎針的情況下將引導(dǎo)加載程序置于串行模式?
Windows CE下GPIO驅(qū)動(dòng)程序的設(shè)計(jì)與應(yīng)用
如何在DOS下安裝Windows Me
微軟推出Outlook桌面崩潰修復(fù)程序
如何在Linux環(huán)境下實(shí)現(xiàn)Python環(huán)境的搭建

使用python開(kāi)發(fā)windows的應(yīng)用程序詳細(xì)說(shuō)明

重新內(nèi)存分配的改變讓Firefox崩潰次數(shù)降低70%
python調(diào)用windows命令
如何使用linux下gdb來(lái)調(diào)試python程序
零基礎(chǔ)入門(mén):如何在樹(shù)莓派上編寫(xiě)和運(yùn)行Python程序?

評(píng)論