• supervisor安装以及监控管理rabbitmq消费者进程


    简介:Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。

    1、安装

    apt-get install supervisor

    2、复制配置文件(否则会无法启动)

    cp /etc/supervisor/supervisord.conf /etc/

    说明:默认/etc/supervisor.conf为空,需要将/etc/supervisor/supervisor.conf的内容复制一份到/etc/supervisor.conf中,否则启动不了。

    3、编写配置文件

    # 创建文件 rabbitmq-worker.conf并写入下面配置
    
    # 设置进程的名称,使用 supervisorctl 来管理进程时需要使用该进程名 [program:rabbitmq
    -worker]

    # 默认为 %(program_name)s,即 [program:x] 中的 x,后面接进程数 process_name
    =%(program_name)s_%(process_num)02d

    # 需要启动执行的命令,这块就是填入rabbitmq消费者脚本命令,注意,docker这块不能有-it参数,否则报错无法启动 command
    =docker exec php7.4-fpm php /var/www/html/rabbitmq/artisan rabbitmq:work --queue=Test

    # 使用 root 用户来启动该进程 user
    =root

    # 在 supervisord 启动的时候也自动启动 autostart
    =true

    # 程序崩溃时自动重启,重启次数是有限制的,默认为3次 autorestart=true

    # 进程数 numprocs=2

    # 重定向输出的日志 redirect_stderr=true

    # 日志路径 stdout_logfile=/www/rabbitmq/rabbitmq_worker.log

    4、相关命令说明

    supervisord : supervisor的服务器端部分,用于supervisor启动
    supervisorctl:启动supervisor的命令行窗口,在该命令行中可执行start、stop、status、
    running:进程处于运行状态
    starting:Supervisor 收到启动请求后,进程处于正在启动过程中
    stopped:进程处于关闭状态
    stopping:Supervisor 收到关闭请求后,进程处于正在关闭过程中
    backoff:进程进入 starting 状态后,由于马上就退出导致没能进入 running 状态
    fatal:进程没有正常启动
    exited:进程从 running 状态退出

    5、常用命令

    1、supervisorctl update   更新配置后必须执行更新命令才生效
    2、supervisorctl status     查看supervisor进程
    3、supervisorctl start rabbitmq-worker:*    启动某个supervisor进程,我这里有:*是因为我的process_name决定的
    4、supervisorctl stop rabbitmq-worker:*    停止某个supervisor进程
    5、supervisorctl stop all    停止所有supervisor进程
    6、supervisorctl restart rabbitmq-worker:*   重启某个supervisor进程
    7、supervisorctl reload    载入最新的配置文件,并按新的配置启动、管理所有进程。
    8、supervisord    启动supervisord

    # 停止
    systemctl stop supervisord
    # 启动
    systemctl start supervisord
    # 状态
    systemctl status supervisord
    # 重载配置
    systemctl reload supervisord
    # 重启
    systemctl restart supervisord

    
    
    补充说明:
    supervisorctl status 列表参数说明
    第一列是服务名;第二列是运行状态,RUNNING表示运行中,FATAL 表示运行失败,STARTING表示正在启动,STOPED表示任务已停止; 第三/四列是进程号,最后是任务已经运行的时间。

    6、效果

    运行了2个rabbitmq消费者,这个数量是在配置里面的numprocs的数量,进rabbitmq管理后台可以看到2个消费者

     

     7、后记问题

      1、上面那种方式会产生一个问题,那就是通过supervisor启动的脚本,会产生2个脚本进程,一个是docker命令的,一个是docker中PHP容器里面的命令

        

         注意看上面的pid2778和2796,但是supervisor只能监控到进程ID2778的docker命令,无法监控到进程ID2796的命令,这就导致使用supervisor无法控制2796进程停止关闭,导致进程残留,

        目前还没想到什么好方式能用supervisor来管理容器内部的进程,目前的解决方案就是在PHP容器里面装supervisor来管理里面的进程,容器外就不装supervisor监控了。

        这样通过supervisor生成的进程就是正常的1个,而且也能通过supervisorctl相关命令控制进程重启和停止了。命令如下

        

    docker exec -i php7.4-fpm supervisorctl stop rabbitmq-worker:*   停止容器里面的脚本进程

    如果有其他好方式,可以评论区讨论

  • 相关阅读:
    n的阶乘
    二叉树遍历
    二分查找练习
    字符串中最长回文序列求解
    复数集合
    AppCrawler自动化遍历使用详解(版本2.1.0 )(转)
    谷歌驱动下载链接
    谷歌浏览器插件
    Pycharm破解方法
    go学习链接
  • 原文地址:https://www.cnblogs.com/chenhaoyu/p/16288027.html
Copyright © 2020-2023  润新知