supervisor + uwsgi 部署python服务踩过的坑

supervisor + uwsgi 部署python服务踩过的坑

最近由于某个python服务不稳定,有时候是造成服务器down机,有时候是服务本身突然就挂了。查了一下原因,发现是内存资源占用过高导致的,

为了让服务稳定运行,便打算引入supervisor + uwsgi对服务进行分布式部署。整个部署流程的坑不少,下面给大家分享一下。

1.supervisord服务的目录不对,执行启动命令sudo systemctl start supervisord.service

报错:systemd18477: Failed at step EXEC spawning /usr/bin/supervisord: No such file or directory

解决办法:

查看supervisord位置 whereis supervisord,将结果替换supervisord.service文件中ExecStart配置的supervisord路径

2.supervisord.service配置文件不对

supervisord.service配置文件的格式严格按照大驼峰式命名法,即所有的首字母必须大写

如果配置文件不对,执行sudo systemctl status supervisord.service可能会报错

例如下面报错

systemd1: /usr/lib/systemd/system/supervisord.service:9 Unknown lvalue 'killMode' in section 'Service'

就是配置文件中killMode属性的首字母没有大写,导致配置文件失效

解决方案:修改killMode为KillMode,再重新启动即可

3.端口占用

报错:Error: Another program is already listening on a port that one of our HTTP servers is configured to use.

Shut this program down first before starting supervisord

解决方案:查看uwsgi.ini配置中的端口的占用情况,可以杀掉该端口进程,或者更换端口

4.用户设置不对

报错:CRIT Supervisor is running as root. Privileges were not dropped because no user is specified in the config file.

If you intend to run as root, you can set user=root in the config file to avoid this message.

解决方案:supervisor.ini配置文件的program中增加一个配置user=test(修改成你需要的用户)

在supervisord.conf的supervisord中增加配置user=test(修改成你需要的用户),在supervisord.service的service中增加配置

user=test(修改成你需要的用户)

5.环境变量不对

现象:使用原有python app.py的方式启动该服务,服务能正常运行。但是使用supervisor + uwsgi的方式部署服务,启动之后服务运行异常

报错ERROR Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.7.0:compile (default-compile) on project

test_project: Fatal error compiling: java.lang.ExceptionInInitializerError: com.sun.tools.javac.code.TypeTags -> Help 1

解决方案:在restart_service.sh脚本中增加两行

source /etc/profile

source /home/test/.bashrc

将用户的环境变量加载生效

相关推荐
鱼听禅11 分钟前
Ubuntu安装YOLOv8进行菌落识别训练
linux·python·yolo·ubuntu
ZhengEnCi32 分钟前
Agent 查不出代码 Bug 怎么办:一份带时间戳的调试日志与读日志排查流程
python·ai编程
瑞雪兆丰年兮38 分钟前
JavaWeb-day14-SpringBootWeb原理篇
java·开发语言·spring boot·spring·bean·mybatis·javaweb
威哥爱编程1 小时前
模拟面试智能体开发实战 05:给面试官接上题库和检索,题目结构化、大纲可溯源,AI 不再凭印象出题
python·agent·harmonyos
威哥爱编程1 小时前
模拟面试智能体开发实战 06:答得好怎么追问、答得错怎么点破,追问引擎让面试官会深挖会纠错
python·agent·harmonyos
codists2 小时前
《crafting interpreters》阅读笔记:4.6.2
python
2601_967979122 小时前
机器学习必修课:经典算法与Python实战
python·算法·机器学习·实战·课程
SomeOtherTime2 小时前
Rust生命周期介绍(AI回答)
开发语言·后端·rust
程序猿打工仔2 小时前
计算机基础(C语言)考编、专技岗
c语言·开发语言·算法
cpolar技术支持2 小时前
listen(5) 只排得住 5 个连接:第 6 个客户端卡在 connect 超时,进程活着端口却显示假活不放行
python·socket·tcp·cpolar·故障排查