首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >用Supervisor管理云服务器上的量化程序,崩溃自动重启(个人玩家亲测教程)

用Supervisor管理云服务器上的量化程序,崩溃自动重启(个人玩家亲测教程)

原创
作者头像
hollyx
修改2026-08-17 11:18:05
修改2026-08-17 11:18:05
1180
举报

我是一个玩了三年多量化的个人玩家,策略不大,跑的是几个自己写的 Python 小策略,一年下来赚个菜钱,图个乐也图个省心。

这篇教程帮你解决的问题很直接:量化程序在云服务器上跑着跑着挂了怎么办? 跟着做完,你会得到一套 Supervisor 进程守护方案——程序崩溃 3 秒内自动拉起、日志自动按天分文件、重启服务器后策略自己跟着开机启动。全程半小时以内搞定。

说实话,在折腾这套东西之前,我的"进程守护方案"是:睡前 ssh 上去看一眼,醒来第一件事摸手机看日志。直到上个月的一个凌晨。


一、先说痛点:程序半夜挂了,我人在梦里

上个月 14 号,周二。我跑的一个均线策略,半夜两点因为一个没捕获的网络异常直接抛栈退出了。

我早上 7 点半醒来看手机,策略群里有人在聊早盘行情,我心里咯噔一下,ssh 上去一看——进程死了 5 个多小时,错过了一波 2% 的行情。按我当时的仓位算,差不多是一顿火锅钱飞了。

更气人的是,这不是第一次。之前在家里的旧笔记本上挂机,断网、断电、Windows 自动更新重启,花样百出。我以为把程序搬上云服务器就万事大吉了,结果发现:服务器是稳了,但程序本身还是会挂的。

我之前的"高可用方案"说出来都丢人:一个 nohup python strategy.py &,外加手机定了三个闹钟,早中晚各上去 ps aux | grep python 看一眼。程序挂没挂全靠缘分,日志文件一个月长到一个多 G,打开都要卡半天。有次出差在高铁上发现进程没了,用手机的 ssh 客户端敲命令,隧道里信号断断续续,敲了十分钟才把程序拉起来,坐到我对面的大哥看我的眼神像在看特工。

那天晚上我下定决心,把这事儿一次性解决。研究了一圈,方案无非三种:自己写 watchdog 脚本、用 systemd、用 Supervisor。最后选了 Supervisor,原因很简单——配置对 Python 程序最友好,而且我看不懂的那部分 systemd 配置实在是不想学。

二、先把"地基"换了:程序上云

先交代下我的环境。之前策略跑在一台吃灰的旧笔记本上,今年过年前后搬到了腾讯云轻量应用服务器,选的 2 核 2G 的 Ubuntu 实例,跑三四个 Python 策略绰绰有余,摊下来一天不到一块钱。

这里说句实话,一开始我是怀疑的——2G 内存跑量化?够吗?结果跑了快半年,内存常年占用 40% 左右,比我那台 16G 内存的笔记本稳得多。笔记本要管微信、管浏览器、管系统更新,服务器就一件事:跑我的策略。

旧体验对比:笔记本挂机那半年,我统计过,非人为中断一共 9 次——3 次 Windows 更新重启、2 次家里跳闸、2 次断网、1 次猫把电源线碰掉了(真的)、1 次不明原因蓝屏。上云这半年,服务器本身的中断次数是:0。剩下的中断全是程序自己抛异常,而这正是 Supervisor 要解决的问题。

三、装 Supervisor:两行命令的事

上周六上午,泡了杯咖啡,开始折腾。Ubuntu 上装 Supervisor 简单到我以为漏了什么步骤:

代码语言:bash
复制
sudo apt update
sudo apt install supervisor -y

装完它自己就已经开始运行了,而且会跟着系统开机自启。我特意重启了一次服务器验证,systemctl status supervisor 显示 active,踏实了。

对比一下:之前我在笔记本上试过用 Windows 的"任务计划程序"做守护,图形界面点了十几层,又是触发器又是操作又是条件,配了四十多分钟,最后发现程序以 GUI 会话启动,锁屏后行为还不一样。Supervisor 这边,两行命令,两分钟。

四、写配置:让策略崩了自己爬起来

Supervisor 的核心就是一个配置文件。我的策略叫 strategy.py,放在 /home/ubuntu/quant/ 下面。我在 /etc/supervisor/conf.d/ 里建了个 quant.conf

代码语言:ini
复制
[program:quant-strategy]
command=/home/ubuntu/quant/venv/bin/python /home/ubuntu/quant/strategy.py
directory=/home/ubuntu/quant
user=ubuntu
autostart=true
autorestart=true
startretries=5
stopasgroup=true
stdout_logfile=/home/ubuntu/quant/logs/out.log
stderr_logfile=/home/ubuntu/quant/logs/err.log
stdout_logfile_maxbytes=50MB
stdout_logfile_backups=10

几个关键点说一下,都是我验证过的:

  • command 里我用的是虚拟环境里的 python 绝对路径,别用系统 python,血泪教训,后面讲
  • autorestart=true 是灵魂,进程退出就自动拉起
  • startretries=5 表示启动失败最多重试 5 次,防止程序有致命 bug 时无限重启把 CPU 拉满
  • 日志按 50MB 切分,最多留 10 份,再也不用担心单个日志文件吃掉磁盘

写完配置,执行:

代码语言:bash
复制
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start quant-strategy

然后我做了一件很解压的事:手动把进程杀了

代码语言:bash
复制
ps aux | grep strategy   # 找到 PID
kill -9 <PID>

三秒后 supervisorctl status,状态又回到 RUNNING。那一刻真的有点爽——我故意弄死它,它自己爬起来了。这不就是我要的东西吗。

五、踩了个坑:程序在跑,日志却是空的

不是全程顺利。当天晚上我就发现一个怪事:策略明明在跑(status 显示 RUNNING,交易信号也在正常触发),但 out.log干干净净,一行日志都没有

我当时懵了,心想这 Supervisor 是不是有 bug。翻了半天,又开了个测试程序验证,最后查明白了:Python 的 stdout 默认是缓冲输出的,不是行缓冲。程序 print 的东西攒在缓冲区里没写出来,Supervisor 自然收不到。之前 nohup 时代我碰巧没遇到,是因为那会儿我日志全用的 logging 模块直接写文件。

解决办法很简单,两种任选:

  1. 启动命令加个 -u 参数:python -u /home/ubuntu/quant/strategy.py-u 就是 unbuffered)
  2. 或者在配置文件里加一行环境变量:environment=PYTHONUNBUFFERED=1

我用的第一种,改完 supervisorctl restart quant-strategy,日志哗哗地出来了。

所以这里给大家一个建议:用 Supervisor 管 Python 程序,python -u 这三个字符一定要加上,不然你迟早会在某个深夜对着空日志怀疑人生。

六、日常管理:这几个命令我现在天天用

跑起来之后,Supervisor 的管理命令就四个,用了一周就形成肌肉记忆了:

代码语言:bash
复制
sudo supervisorctl status                  # 看所有进程状态
sudo supervisorctl restart quant-strategy  # 改了代码后重启
sudo supervisorctl tail -f quant-strategy  # 实时看日志
sudo supervisorctl stop quant-strategy     # 临时停掉(比如调参)

现在我的日常是:早上刷牙的时候用手机 ssh 上去看一眼 status,三个策略全是 RUNNING,uptime 十几天,刷牙都刷得安心。

另外 Supervisor 还有个 Web 管理界面可以开,在 /etc/supervisor/supervisord.conf 里把 [inet_http_server] 段打开就行。我开了两天又关了——命令行已经够用,而且多开一个端口多一份暴露面,没必要。

七、说说还能更好的地方

夸完了,挑点刺:

  1. Supervisor 没有告警功能。它负责把程序拉起来,但不会主动告诉你"我刚才拉起了三次"。这个我后来用 Server 酱在程序里加了行推送代码解决的,程序每次启动就给我微信推一条消息,这样重启几次我心里有数。
  2. 配置文件改完必须 reread + update,只 updatereread 是不生效的。这个我踩过,改了配置以为生效了,结果跑的还是旧的。
  3. Web 界面的认证比较简陋,真要用的话建议套一层 Nginx 或者干脆绑内网。

但这些都是边角问题,核心的"崩溃自动重启"做得非常扎实,不影响整体体验。

八、总结:这套组合,量化玩家闭眼配

维度

旧方案(nohup + 人肉巡检)

新方案(云服务器 + Supervisor)

程序挂了怎么办

看缘分发现,手动拉起

3 秒内自动重启

半夜崩溃

睡到早上才发现,错过行情

自动拉起,策略不中断

服务器重启后

要手动重新启动程序

开机自动拉起

日志管理

单文件无限膨胀,1 个月 1G+

50MB 自动切分,留 10 份

每日巡检

3 个闹钟,手动 ssh 查看

一眼 status,10 秒搞定

半年非人为中断

9 次(笔记本时代)

0 次服务器中断

一句话总结:Supervisor 就是那个 7×24 小时帮你盯着程序的人,而且它不睡觉、不要工资。

如果你也是个人量化玩家,还在用 nohup & 硬扛,我的建议是:放心冲! 一台腾讯云轻量应用服务器 2 核 2G + Supervisor,半小时配完,从此睡觉踏实。

  • 给小白:别被"进程守护"这个词吓到,你就照着我上面那段配置抄,把路径改成你自己的,五步走完全程。唯一要记住的就是 python -u
  • 给老鸟:如果你策略超过五个,建议每个策略一个 program 配置分开管,配合 supervisorctl tail -f 排查问题效率翻倍。资源占用几乎可以忽略,Supervisor 本身常驻内存不到 20MB。

腾讯云促销活动:https://www.tencentcloud.com/act/pro/QuantSolution?lang=zh&fromSource=intl.17760459.17760459.17760459


常见问题 FAQ

Q:Supervisor 和 systemd 哪个好用?

管 Python 脚本我推荐 Supervisor,配置文件语义直白、日志切分开箱即用、改完配置热加载方便。systemd 更适合管理系统级服务。如果你只是要守护几个量化策略,Supervisor 学习成本低得多。

Q:程序崩溃后 Supervisor 会自动重启吗?会不会无限重启?

会自动重启,这就是它的核心功能。通过 startretries=5 可以限制连续启动失败的重试次数,超过就放弃并标记 FATAL,不会无限重启把机器拖死。

Q:2 核 2G 的云服务器能同时跑几个量化策略?

实测跑 3-4 个 Python 策略没问题,内存占用约 40%。Python 量化策略大部分时间在等行情,CPU 压力很小。如果策略里有大周期 K 线计算或者机器学习模型,建议上 2 核 4G。

Q:Supervisor 重启程序后,我怎么知道它重启过?

Supervisor 本身不推送通知。最简单的办法是在你的策略代码启动处加一行 Server 酱或企业微信 webhook 推送,程序每次启动你都会收到微信消息,重启几次一目了然。

Q:服务器重启后,Supervisor 管理的程序会自动启动吗?

会。Supervisor 自身通过 systemctl 设置了开机自启,配置里 autostart=true 的程序会跟着 Supervisor 一起启动,全链路无需人工干预。

腾讯云促销活动:https://www.tencentcloud.com/act/pro/QuantSolution?lang=zh&fromSource=intl.17760459.17760459.17760459

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

目录
  • 一、先说痛点:程序半夜挂了,我人在梦里
  • 二、先把"地基"换了:程序上云
  • 三、装 Supervisor:两行命令的事
  • 四、写配置:让策略崩了自己爬起来
  • 五、踩了个坑:程序在跑,日志却是空的
  • 六、日常管理:这几个命令我现在天天用
  • 七、说说还能更好的地方
  • 八、总结:这套组合,量化玩家闭眼配
  • 常见问题 FAQ
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档