CentOS8服务器之python程序后台常驻

这个作业属于哪个课程 2021春软件工程实践W班
这个作业要求在哪里 作业要求
这个作业的目标 个人技术博客
其他参考文献 screen命令的使用
supervisor的使用

技术概述

主要解决python程序部署到CentOS8之后怎么进行后台常驻的问题。团队项目时需要将自己的python代码放在服务器上跑,并且保证持续运行,不然小程序端和后台Web端无法获取数据并显示图表。建议使用screen命令而不是supervisor,screen命令较简单且有效,而supervisor配置比较麻烦,有时程序仍然会自动停止【至少我用的时候supervisor会自己停掉】。

技术详述

这里介绍两种方法,而我推荐使用第一种。命令运行环境为CentOS8。

screen命令

  1. 如果不是root用户先切换成root用户

    sudo su root
    

    image

  2. 安装screen命令

    yum install screen #安装
    
  3. 创建screen会话

    screen -S test   # test 为虚拟终端名
    

    在本次团队中,我设置虚拟终端名为:electromobile,因此命令如下:

    screen -S electromobile
    

    image

  4. 这时会出现一个新的终端窗口:

    image

    切换到程序所在目录后:

    cd /root/yolov4-count/   # cd后的路径为程序所在目录
    

    image

    如果有虚拟环境则启动虚拟环境:

    source venv/bin/activate   # 虚拟环境的目录
    

    image

    在该窗口下输入程序的运行命令:

    python3 main.py
    

    image

    这时候在新的终端窗口就能看到程序开始运行了,可以断开远程链接啦。

  5. 回来检查一下程序是否真的在运行,重新登录远程终端,切换成root用户后,输入命令:

    screen -r electromobile  # electromobile 为虚拟终端名
    

    image

    这时候就会跳转到虚拟终端名为electromobile的终端窗口,可以看到程序仍然在运行。

    image

supervisor

  1. 如上,如果不是root用户先切换成root用户

  2. 安装supervisor:

    yum install supervisor
    
  3. 一般在路径/ect/下能找到文件夹supervisord.d

    image

  4. 在该文件夹下新建一个配置文件,如electromobile.conf

    image

  5. 配置文件electromobile.conf里的内容如下:

    [program:electromobile]
    command=/root/yolov4-count/venv/bin/python3 /root/yolov4-count/main.py  # 第一个参数为虚拟环境中的python3.exe路径,第二个参数为程序的主程序
    autostart=true   # 是否自启动
    autorestart=true   # 是否自动重启
    
  6. 启动程序:

    supervisorctl start electromoible   # start后跟上一步中[program:_______]中的名字
    

    image

遇到的问题与解决过程

问题一

看到有些教程修改了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 安装、配置、常用命令
作者:削微寒

posted @ 2021-06-28 21:12  Aurora315  阅读(494)  评论(0编辑  收藏  举报