分类
Linux

使用 Supervisor 将你的 Python 程序变成服务

不少朋友都是用 Flask 框架来写小服务器的,方便又快捷,还能一键运行,很舒服。不过,如果你真的想把你的服务部署到服务器上,那你就会发现其实还有一些功课要做,这篇文章里,我们主要来谈谈如何将写好的程序在服务器上变成一个服务而不是终端里执行的命令。

如果我们用 Python 写了一个网站应用,那么它就需要一直运行来监听 HTTP 请求,如果在终端直接执行 python main.py 那就太麻烦了,你还得一直保持终端开启,端了 ssh,程序也就结束了。

起初,我是这么做的: nohup python -u /home/logcg/main.py > /home/logcg/out.log 2>&1 & ,Nohup 这个工具能让程序在后台运行,这样即使你断开了 ssh,关闭了终端,服务器上的程序依旧在运行,如果你把这条命令写到 rc.local ,那么它就能每次跟随服务器启动而启动,完美……吗?

这个解决方案看上去很完美,类似的还有比如 screen 等命令,但仔细一想,如果程序实行意外崩溃了怎么办?

——很遗憾,没办法,唯一的办法就是等你的客户告诉你:你的网站打不开了。

总之,现在我们可以用另一个工具直接将你的程序“变成”系统级服务,就像 Nginx,像 fail2ban 那样,一旦程序崩溃,系统会负责将它重启——除非你手动停止它。

Supervisor

这是一个纯 Python 实现的工具,它是一个轻量级进程管理工具,能够根据你的配置自动启动并监控进程,一旦程序意外崩溃,它就会重新启动它们。

启动后,在 /etc/supervisor/conf.d 目录下写入你的命令相关配置,最好是一个命令一个文件,方便管理,文件名要求是 .conf 后缀。

比如,我有一个这样的服务:

这样,我的 Python 程序就变成了一个叫做“logcg”的服务。

最后, supervisorctl update all 更新所有服务的配置信息:

当然,你还可以使用命令 supervisorctl status all 来查看所有服务的运行状态,将 all 换成特定的服务名称,就能查询单个的服务了。

这下,再也不用担心因为一些意外的小问题导致程序崩溃再也起不来了。

参考文献

本文由 落格博客 原创撰写:落格博客 » 使用 Supervisor 将你的 Python 程序变成服务

转载请保留出处和原文链接:https://www.logcg.com/archives/3304.html

由落格博客

如非声明,本人所著文章均为原创手打,转载请注明本页面链接和我的名字。

“使用 Supervisor 将你的 Python 程序变成服务”上的2条回复

发表评论

电子邮件地址不会被公开。 必填项已用*标注