zoukankan      html  css  js  c++  java
  • supervisor-管理多个项目启动


    目前项目需要启动的文件比较多, 有主进程main.py, 小进程PedestrianTrailGenerator.py, 定时celery任务, java spring-boot启动, 每个单独启动比较麻烦, 就使用supervisor管理这些需要启动的进程.

    具体的supervisor详细配置内容, 可以参考官网http://supervisord.org/introduction.html, 或者这个总结链接:https://www.cnblogs.com/zhaoding/p/6257363.html

    这里把本项目配置的操作记录一下:

    下载

    这里使用pip安装, 因为python运行时需要进入指定的虚拟环境, 所以可以把supervisor直接安装在虚拟环境下面, 但是这样启动supervisor前需要手动进入虚拟环境中, 这样不够偷懒, 所以这里把supervisor装在外部的环境中.由于本机用的是anaconda, shell连接后默认进入的是base环境, 这里我们把supervisor装在base环境中

    pip install supervisor
    

    设置配置文件

    官方是把配置文件放到/etc目录下

    echo_supervisord_conf > /etc/supervisord.conf
    

    这里为了配置方便, 把配置文件放到了项目的根目录下

    echo_supervisord_conf > /home/alex/project_root_path/supervisord.conf
    

    配置文件中有很多默认配置, 这里我们只该我们需要的配置即可

    配置supervisord

    这里主要配置日志文件的路径, 为了查看方便, 依然设置的是在项目根目录下.

    该日志文件记录的是spuervisor服务启动的日志, 不是具体自定义进程内部的日志

    [supervisord]
    logfile=/home/alex/project_root_path/supervisord.log ; main log file; default $CWD/supervisord.log
    

    其他配置这里保持默认

    配置program

    python文件的运行如下:

    [program:run_main]
    command=/home/alex/anaconda3/envs/test_env/bin/python -u main.py
    directory=/home/alex/project_root_path
    stdout_logfile=supervisor_run_main.log        ; stdout log path, NONE for none; default AUTO
    stderr_logfile=supervisor_run_main.log        ; stderr log path, NONE for none; default AUTO
    
    • program: 进程名称, 自定义
    • directory: 运行command前进入的目录, 当然也可以直接在command中指定目录
    • stdout_logfile: 记录进程内部运行后的print等日志
    • stderr_logfile: 同stdout_logfile一样, 只不过记录的是运行中的错误日志, 这里我把他们设置在了一个日志文件中
    • command: 进程运行的命令

    celery文件的运行如下:

    [program:run_celery]
    command=/home/alex/anaconda3/envs/test_env/bin/celery -A tasks worker -B
    directory=/home/alex/project_root_path
    stdout_logfile=supervisor_run_celery.log        ; stdout log path, NONE for none; default AUTO
    stderr_logfile=supervisor_run_celery.log        ; stderr log path, NONE for none; default AUTO
    

    spring-boot的运行如下:

    [program:run_hkapi]
    command=mvn spring-boot:run
    directory=/home/alex/pom.xml_path
    stdout_logfile=supervisor_run_hkapi.log        ; stdout log path, NONE for none; default AUTO
    stderr_logfile=supervisor_run_hkapi.log        ; stderr log path, NONE for none; default AUTO
    

    遇到的问题

    程序中的print()没有正常输出到日志文件中

    百度查找说因为缓冲区的问题, 在python的执行命令中加入-u参数就可以了

    设置python运行时的虚拟环境

    因为前面把supervisor安装在了python运行时的虚拟环境外面, 因此在[program]中需要设置运行的虚拟环境.

    首先尝试了在python语句前拼接conda启动环境的命令:

    command=conda activate text_env&&python -u main.py
    

    但是报错日志说:

    CommandNotFoundError: Your shell has not been properly configured to use 'conda activate'
    

    看来是不能读取到conda activate命令

    然后尝试了使用supervisor自带的environment属性, 例下等:

    environment=PYTHONPATH="/home/alex/anaconda3/envs/test_env"
    或者
    environment=PYTHONPATH="/home/alex/anaconda3/envs/test_env/bin"
    或者
    environment=PYTHONPATH=$PYTHONPATH:/home/alex/anaconda3/envs/test_env
    

    都没有生效, 还是在[program]中设置的日志中报错: 没有找到xxx模块

    最后只能在command中写死虚拟环境的python解释器的路径, 这样也能实现虚拟环境中启动python文件

    常用命令

    命令 用途
    supervisord 启动supervisor监管服务
    supervisorctl start xxx 启动XXX进程
    supervisorctl restart xxx 重启XXX进程
    supervisorctl stop xxx 停止XXX进程
    supervisorctl stop all 停止全部进程
    supervisorctl status 查看supervisor监管的进程状态
    supervisorctl reload 修改完配置文件后重新启动supervisor
    supervisorctl update 根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启
  • 相关阅读:
    centos 系统时间设置
    centos6 centos7 配置开机启动服务
    centos6.9 samba配置
    vmware异常关闭后导致虚拟机无法打开问题解决办法
    try using -rpath or -rpath-link
    ZR#988
    提高十连测day3
    Atcoder ABC 141
    ZR#957
    ST表
  • 原文地址:https://www.cnblogs.com/gcxblogs/p/14669491.html
Copyright © 2011-2022 走看看