资讯专栏INFORMATION COLUMN

怎么管理Python管理神器,Supervisor解答

89542767 / 243人阅读


  Supervisor是什么呢?它作为一种进程管理的软件,可以对其用来监视以及进行控制Linux上面的服务器进程。它很神奇,能够将一个普通的命令,转化成后台的进程,甚至如果我们遇到退出的话,也会强制的进行退出,具体怎么运作呢?下面就给大家进行详细的解答。


  一、简介


  Supervisor是一款Python开发的进程管理系统,允许用户监视和控制Linux上的进程,能将一个普通命令行进程变为后台守护进程,异常退出时能自动重启


  二、安装


  Supervisor支持Linux和Mac,不支持Windows


  本文系统为:centos,supervisor==4.2.4

   pip3 install supervisor

  安装完成后,在Python bin目录下面会有这样几个文件。

   ls /usr/local/Python38/bin

   echo_supervisord_conf
   supervisorctl
   supervisord

  注:由于python bin目录是加入了环境变量,所以可以直接执行这几个文件。


  三、创建配置文件


  1.首先建个目录,存放配置文件:mkdir supervisord。

   echo_supervisord_conf > supervisord/supervisord.conf

  若报错-bash:/etc/supervisord.conf:Permission denied,需要切换到root用户。


  2.创建子进程配置文件路径

   mkdir -p supervisor/conf.d

  后面我们的任务,我们想把它作为守护进程,都需要一个配置文件,我们把这些配置文件放在conf.d目录下面。


  3.修改配置文件

   mkdir -p supervisor/conf.d

  将最后一部分改为

   [include]
   # 因为我这里是放在root用户目录下,也可以放其它目录
   files=/root/supervisord/conf.d/*.conf

  四、初试


  1.启动supervisord

   supervisord -c supervisord/supervisord.conf

  这样就把supervisord启动了,我们接下来可以把我们的任务交给他去守护了,停止了会帮我们自动重启。


  查看版本


  2.编写简单的Shell脚本

   supervisord -v

  内容如下


  简单运行,Ctrl+C退出


  3.创建子进程配置文件

   vim supervisor/conf.d/test.conf

  test.conf内容如下:

   [program:test]
   command=sh /root/supervisord/test.sh
   priority=999                              ; 相对启动优先级,数值越小越优先,默认为999
   autostart=true                            ; 在supervisor启动时自动启动,默认为true
   autorestart=true                          ; 在意外退出时重新启动,默认为true
   startsecs=10                              ; 子进程启动多少秒后状态为running则认为启动成功,默认为1
   startretries=3                            ; 尝试启动的最大次数,默认为3
   exitcodes=0,2                             ; 进程的预期退出代码列表,默认为0
   stopsignal=QUIT                           ; 终止进程的信号,默认为TERM
   stopwaitsecs=10                           ; 在SIGKILL之前等待的最大秒数,默认为10
   user=root                                 ; 在某用户下设置uid来启动程序,默认不切换用户
   redirect_stderr=true                      ; 是否重定向stdout和stderr,默认为false
   stdout_logfile=/tmp/supervisor.stdout.log  ; stdout的输出文件,默认为AUTO
   stdout_logfile_maxbytes=50MB              ; stdout最大文件大小,默认为50MB
   stdout_logfile_backups=10                 ; stdout文件备份数,设为0则不备份,默认为10

  其实只需要配置3个参数,其它不用管:


  command=sh/root/supervisord/test.sh:我们的子进程启动命令;


  stdout_logfile=/tmp/supervisor.stdout.log:日志;


  program:test:进程名为test,如果进程哪一天想停止启动等,需要进程名;


  目前文件目录结构是这样的:

   yum install tree
   tree supervisord

   supervisord
  ├── conf.d
  │   └── test.conf
  ├── supervisord.conf
  └── test.sh

  .重新读取配置并更新子进程


  因为我们的supervisord已经启动了,可以通过ps-ef|grep supervisord.conf查看。添加了子进程配置文件,需要把它重新加载进来:


  先进入supervisord目录:cd supervisord,否则执行下面命令会有问题。

  supervisorctl reread

  再次查看进程状态

  supervisorctl status

  结果:


  test RUNNING pid 30278,uptime 1:29:41


  名为test的这个进程已经作为守护进程在后台运行,我们来kill掉他:

   kill 30278

  再执行supervisorctl status,会发现状态立马由starting,不一会变成running,那么supervisord的作用已经很明显了,可以自动帮我们自动监控任务。


  注:对于子进程的添加、删除、启动、停止相关命令,见附录。


  五、Web界面


  web界面没多大用处,就是如果想启动、暂停进程是,不需要敲命令而已。

   vim supervisord.conf

  取消注释


  重启supervisord

   supervisorctl reload

  浏览器访问:linux_ip:9001.

   supervisorctl reload

  附录:supervisorctl常用命令


  新增某配置文件,重新加载


    supervisorctl reread


  改动某配置文件,重新加载


   supervisorctl update


  重启supervisord

  

  supervisorctl reload

  

     查看所有进程状态


   supervisorctl status


  查看指定进程状态


supervisorctl status<name>


  启动所有子进程


supervisorctl start all


  启动指定子进程


supervisorctl status<name>


  重启所有子进程


 supervisorctl restart all


  重启指定子进程


   supervisorctl restart<name>


  停止所有子进程


  supervisorctl stop all


  停止指定子进程

  

   supervisorctl stop<name>


  添加子进程到进程组


   supervisorctl add<name>


  从进程组移除子进程,需要先stop。注意:移除后,需要使用reread和update才能重新运行该进程


   supervisorctl reomve<name>


  以上就位大家介绍到这里了,希望可以为各位读者带来帮助。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/127619.html

相关文章

  • 如何在 virtualenv 环境下搭建 Python Web

    摘要:生产环境下,自带的服务器,无法满足性能要求。配置前面我们已经在系统环境下安装了安装好的二进制文件放在文件夹下,接下来使用来管理。参考文章探针安装部署部署笔记在生产环境上部署使用详解本文系工程师编译整理。 由于字数的限制,其实本篇文章的全标题为 《如何在 virtualenv 环境下 Django + Nginx + Gunicorn+ Supervisor 搭建 Python Web》...

    roland_reed 评论0 收藏0
  • 如何在 virtualenv 环境下搭建 Python Web

    摘要:生产环境下,自带的服务器,无法满足性能要求。配置前面我们已经在系统环境下安装了安装好的二进制文件放在文件夹下,接下来使用来管理。参考文章探针安装部署部署笔记在生产环境上部署使用详解本文系工程师编译整理。 由于字数的限制,其实本篇文章的全标题为 《如何在 virtualenv 环境下 Django + Nginx + Gunicorn+ Supervisor 搭建 Python Web》...

    godiscoder 评论0 收藏0
  • 基于Flask-Angular的项目组网架构与部署

    摘要:基于网,分享项目的组网架构和部署。项目组网架构架构说明流项目访问分为两个流,通过分两个端口暴露给外部使用数据流用户访问网站。通过进行配置,使用作为异步队列来存储任务,并将处理结果存储在中。 基于Raindrop网,分享项目的组网架构和部署。 项目组网架构 showImg(https://cloud.githubusercontent.com/assets/7239657/1015704...

    kelvinlee 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<