CentOS8服务器之python程序后台常驻
这个作业属于哪个课程 | 2021春软件工程实践W班 |
---|---|
这个作业要求在哪里 | 作业要求 |
这个作业的目标 | 个人技术博客 |
其他参考文献 | screen命令的使用 supervisor的使用 |
技术概述
主要解决python程序部署到CentOS8之后怎么进行后台常驻的问题。团队项目时需要将自己的python代码放在服务器上跑,并且保证持续运行,不然小程序端和后台Web端无法获取数据并显示图表。建议使用screen命令而不是supervisor,screen命令较简单且有效,而supervisor配置比较麻烦,有时程序仍然会自动停止【至少我用的时候supervisor会自己停掉】。
技术详述
这里介绍两种方法,而我推荐使用第一种。命令运行环境为CentOS8。
screen命令
-
如果不是root用户先切换成root用户
sudo su root
-
安装screen命令
yum install screen #安装
-
创建screen会话
screen -S test # test 为虚拟终端名
在本次团队中,我设置虚拟终端名为:
electromobile
,因此命令如下:screen -S electromobile
-
这时会出现一个新的终端窗口:
切换到程序所在目录后:
cd /root/yolov4-count/ # cd后的路径为程序所在目录
如果有虚拟环境则启动虚拟环境:
source venv/bin/activate # 虚拟环境的目录
在该窗口下输入程序的运行命令:
python3 main.py
这时候在新的终端窗口就能看到程序开始运行了,可以断开远程链接啦。
-
回来检查一下程序是否真的在运行,重新登录远程终端,切换成root用户后,输入命令:
screen -r electromobile # electromobile 为虚拟终端名
这时候就会跳转到虚拟终端名为
electromobile
的终端窗口,可以看到程序仍然在运行。
supervisor
-
如上,如果不是root用户先切换成root用户
-
安装supervisor:
yum install supervisor
-
一般在路径
/ect/
下能找到文件夹supervisord.d
: -
在该文件夹下新建一个配置文件,如
electromobile.conf
: -
配置文件
electromobile.conf
里的内容如下:[program:electromobile] command=/root/yolov4-count/venv/bin/python3 /root/yolov4-count/main.py # 第一个参数为虚拟环境中的python3.exe路径,第二个参数为程序的主程序 autostart=true # 是否自启动 autorestart=true # 是否自动重启
-
启动程序:
supervisorctl start electromoible # start后跟上一步中[program:_______]中的名字
遇到的问题与解决过程
问题一
看到有些教程修改了supervisor的默认配置文件
supervisord.conf
,又新建了一个自己的配置文件,也不讲为什么这么做,极其影响supervisor的使用感。
修改supervisord.conf
是因为在该文件的末尾指定了supervisor能识别的配置文件的后缀名:
[include]
files = supervisord.d/*.conf # 有的是*.ini
如果为*.ini
,则自定义配置文件要为electromobile.ini
;如果修改成如上所述,则自定义配置文件要改为electromobile.conf
。
问题二
使用supervisor时发现数据库数据没有更新,想看是哪里出了问题,但是觉得修改配置文件很麻烦,不想在配置文件中设置日志log的输出。
使用sudo supervisorctl tail electromobile stderr
命令,看到报错信息,根据报错修改代码。
总结
supervisor对我来说体验感并不是很好,很容易踩坑,大部分教程难理解。对于服务器部署新手来说,screen命令更加友好,不需要配置文件,命令也很容易理解。能达到同样结果为什么不选screen呢?
参考博客
screen命令的使用
原标题:Centos下远程连接断开后让程序继续运行解决办法
作者:不稚名
supervisor的使用
原标题:supervisor 安装、配置、常用命令
作者:削微寒