如何在Windows下使用 Supervisor 重新拉起崩溃的Python程序

我们用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==2232.编写自重启配置
接下来,你需要编写一个让你的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 284722022-06-27 19:58:54,815 info spawned: 'cancel' with pid 272202022-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 272202022-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 166402022-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.loglogfile_maxbytes = 50mblogfile_backups=10loglevel = infopidfile = /tmp/supervisord.pid

福禄克与您相约2017年11月20日上海国际电力展
大功率LED照明散热的探讨
iPhone 8 Plus透明屏有哪些挑战和限制?
智慧汇聚 科技让物流更有“质”感
夏天电脑CPU太烫?“核心直触散热支架”了解一下
如何在Windows下使用 Supervisor 重新拉起崩溃的Python程序
工业以太网应用实例
Redmi K30 5G版将于1月7日开售搭载骁龙765G平台支持双模5G网络
物联网和人工智能结合打造最大化效益
光莆系列消杀产品打造安全无忧的赛场环境
菲斯克宣布新款固态锂电池充电仅需9分钟
异步设计之Verilog时序分析
蒸汽清洗机非接触式液位检测方案
SQL的定义、组成及基本语法
TOF激光雷达的类别
几个关于充电电池错误认识
电路仿真:什么是SPICE模型!SPICE的变异与进化
神经网络加速+GPU能够提供强有力的算力,为人工智能赋能
380交流接触器型号怎么区分(实物接线图)
轮到英特尔酷睿i7被轰成渣?AMD 12核心Ryzen处理器曝光