Python3.5中有什么工具可以替代supervisor进行进程管理?

请问 python3.5 可以使用哪个工具来代替 supervisor 呢? supervisor 只支持 python2,好苦闷…(同样让人苦闷的还有 fabric …不过好在 fabric3 和 fabric 目前只差了一个小版本)
查到一个包叫做 circus,不过查看 circus 的文档上说 circus 支持到 python3.3,不知道用在 3.5 上会不会有什么问题…请问各位使用 py3.5+的使用什么工具代替 supervisor 呢
Python3.5中有什么工具可以替代supervisor进行进程管理?

12 回复

装个 py2,用 py2 跑 supervisor 咯


在Python 3.5环境下,除了supervisor,确实有几个不错的进程管理工具可选。

1. systemd 如果你的系统是较新的Linux发行版(比如Ubuntu 16.04+或CentOS 7+),首推systemd。它是现在的系统和服务管理器,用来管理Python进程非常稳。你写个简单的service单元文件(比如/etc/systemd/system/myapp.service)就能搞定:

[Unit]
Description=My Python Application

[Service]
Type=simple
User=your_username
WorkingDirectory=/path/to/your/app
ExecStart=/usr/bin/python3.5 /path/to/your/app/main.py
Restart=always

[Install]
WantedBy=multi-user.target

然后sudo systemctl start myapp启动,sudo systemctl enable myapp设置开机自启。日志直接用journalctl -u myapp看,特别方便。

2. Circus 如果你想要一个和supervisor更像、功能也更丰富的Python专用工具,试试Circus。它来自Mozilla,用Python写的,通过管道管理进程,支持Web界面和实时监控。安装很简单:pip install circus。配置文件(比如circus.ini)长这样:

[watcher:myapp]
cmd = python3.5 /path/to/your/app/main.py
numprocesses = 1

circusd circus.ini启动守护进程,再用circusctl命令行工具控制。

3. PM2 如果项目里混了Node.js,或者你喜欢它的生态,PM2也支持Python。虽然它主要针对Node,但管理任意进程脚本没问题。先装Node.js和npm,然后npm install pm2 -g。启动应用:pm2 start /path/to/your/app/main.py --interpreter python3.5。常用命令像pm2 listpm2 logs都很直观。

4. 纯Python方案:multiprocessing + 信号处理 对于简单场景,不想引入额外依赖,可以自己用标准库的multiprocessing模块写个轻量管理器。结合signal处理优雅退出,虽然功能有限,但足够控制几个子进程的启动和停止了。

总结 这几个工具各有侧重:systemd集成度高,Circus功能全,PM2生态好,自建方案最轻量。根据你的具体需求和环境选就行。

没有特殊需求的话任意语言写的 supervisor 都可以,毕竟管理的是 process

装个 python 2 啊。。。又不冲突

supervisor 4.0.0.dev0 已经支持 python3 了,

我之前看 supervisor 的文档上强调说,千万不能将 supervisor4 用在生产环境上…我是想用在生产环境做进程管理,所以没敢上(⊙﹏⊙)b

我这边已经在线上用了。。。。。

额…用起来怎么样?有没有遇到什么坑?稳定吗

蛮稳定的,没出现错过

我司线上就是 py2 环境下的 supervisor 跑 py3 的 web 项目 两年多来没遇到过什么问题

回到顶部