• supervisor进程管理工具


    Supervisor

      一个python写的进程管理工具,用来启动、关闭、重启进程,可以同时控制多个进程。

    安装:
      pip install supervisor

    配置:
      通过配置文件来满足自己的需求

      配置文件分为两部分:

    • supervisord(server端,对应supervisorctl为client端)
    • 应用程序(即我们管理要应用程序)

      1.supervisord配置:

        安装好后,可以运行echo_supervisord_conf命令来输出默认的配置项(里面有配置项和对应的注释)

        但是通常的做法是把其重定向到指定的文件中,运行如下:

          echo_supervisord_conf > xx/supervisord.conf

        上述重定向的文件可以随便放在哪个目录下面,有访问权限就可以

        配置参考:

     1 [unix_http_server]
     2 file=/tmp/supervisor.sock   ; the path to the socket file
     3 
     4 [supervisord]
     5 logfile=/tmp/supervisord.log ; main log file; default $CWD/supervisord.log
     6 logfile_maxbytes=50MB        ; max main logfile bytes b4 rotation; default 50MB
     7 logfile_backups=10           ; # of main logfile backups; 0 means none, default 10
     8 loglevel=info                ; log level; default info; others: debug,warn,trace
     9 pidfile=/tmp/supervisord.pid ; supervisord pidfile; default supervisord.pid
    10 nodaemon=false               ; start in foreground if true; default false
    11 minfds=1024                  ; min. avail startup file descriptors; default 1024
    12 minprocs=200                 ; min. avail process descriptors;default 200
    13 
    14 [rpcinterface:supervisor]
    15 supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
    16 
    17 [supervisorctl]
    18 serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL  for a unix socket
    19 
    20 [include]
    21 files = relative/directory/*.ini

        启动supervisord:

          supervisord -c xx/supervisord.conf

        通过-c去指定配置文件路径,如果不指定路径的话,则会按如下顺序查找:

          ./supervisord.conf ./etc/supervisord.conf /etc/supervisord.conf

        查看是否在运行:

          ps -ef |grep "supervisord.conf"

      

      2.program配置:

        接下来就是应用程序的配置了

        注意一个地方:

          一般我们会把要管理的进程的配置文件单独独立出来,然后通过上面supervisord的配置文件中的 [include] 选项(上述配置参考第21行)进行导入,这样子的话就可以使多个进程的管理相互独立出来。

        配置参考:

     1 [program:starcloud]
     2 directory = /home/ubuntu/StarCloud/starcloud  ; 程序的启动目录
     3 command = /usr/bin/python /home/ubuntu/StarCloud/starcloud/start.py  ; 启动命令,可以看出与手动在命令行启动的命令是一样的
     4 autostart = true  ; 在 supervisord 启动的时候也自动启动
     5 startsecs = 5  ; 启动 5 秒后没有异常退出,就当作已经正常启动了
     6 autorestart = true  ; 程序异常退出后自动重启
     7 startretries = 3  ; 启动失败自动重试次数,默认是 3
     8 user = ubuntu  ; 用哪个用户启动
     9 redirect_stderr = true  ; 把 stderr 重定向到 stdout,默认 false
    10 stdout_logfile_maxbytes = 20MB  ; stdout 日志文件大小,默认 50MB
    11 stdout_logfile_backups = 20  ; stdout 日志文件备份数
    12 stdout_logfile = /home/ubuntu/StarCloud/log/supervisor.log  ; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)

    supervisorctl客户端控制台:

        我们可以在这个控制台查看当前运行的进程的状态:status

        停止进程:stop

        启动进程:start

        重启进程:restart

        热更新配置文件:reload

    两个日志文件

      在配置中,我们会有两个日志文件:

      1. 对supervisor的运行状况进行日志记录:/tmp/supervisord.log(默认),实际是在supervisord配置中logfile这里进行配置
      2. 对所管理进程的应用程序进行日志记录:在program配置中的stdout_logfile对应的日志文件。
  • 相关阅读:
    my first blog
    CentOS启动报错:Centos kernel panic-not syncing:VFS:Unable to mount root fs on unknown block
    J2EE在Web容器中启动报错:com.sun.jdi.InvocationException occurred invoking method.
    SVN报错:can't open file db/txn-current-lock:permission denied 解决方法
    Linux(CentOS6.4、CentOS6.3)下安装、配置PostgreSQL9.2
    [模板] 线性代数:矩阵/高斯消元/矩阵求逆/行列式
    [模板] 杂项:二分/离散化/随机数/其他
    [模板] 图论:存储/拓扑排序
    Luogu1137 旅行计划(拓扑排序)
    C++模板、.vimrc和一些Linux配置
  • 原文地址:https://www.cnblogs.com/ShaunChen/p/7486939.html
Copyright © 2020-2023  润新知