zoukankan      html  css  js  c++  java
  • supervieord的使用

    用途

    守护进程,帮你管理其他进程,让其他进程成为后台进程

    监控进程是否死掉,自动重启;
    管理进程的启动,停止;
    对进程输出的日志进行管理
    每个进程使用不同的用户启动,这样可以使进程获得不同用户的权限
    

    安装

    pip install supervisor

    生成示例配置文件

    echo_supervisord_conf

    服务端启动和关闭

    supervieord -c *.conf
    supervisorctl shutdown

    命令

    supervisorctl

    开机启动

    centos6和centos7不一样

    配置含义

    http://supervisord.org/configuration.html#supervisord-section-values

    举例某个应用的配置含义

    添加或者修改配置文件后,需要重新加载
    supervisorctl reload
    
    [program:test]  ; 这个就是咱们要管理的子进程了,":"后面的是名字,最好别乱写和实际进程有点关联最好。这样的program我们可以设置一个或多个,一个program就是要被管理的一个进程
    directory = /var/www/test/ ; 程序的启动目录;进程运行前,会前切换到这个目录
    command =  python test.py ; 启动命令,可以看出与手动在命令行启动的命令是一样的; 有一点需要注意的是,我们的command只能是那种在终端运行的进程,不能是守护进程。这个想想也知道了,比如说command=service         
                                           httpd start。httpd这个进程被linux的service管理了,我们的supervisor再去启动这个命令这已经不是严格意义的子进程了。这个是个必须设置的项
    autostart = true     ; 在 supervisord 启动的时候也自动启动
    startsecs = 5        ; 启动 5 秒后没有异常退出,就当作已经正常启动了
    autorestart = true   ; 程序异常退出后自动重启,有三个选项,false,unexpected和true。如果为false的时候,无论什么情况下,都不会被重新启动,如果为unexpected,只有当进程的退出码不在下面的exitcodes里面定义的退 
                                 出码的时候,才会被自动重启
    ;exitcodes=0,2         ; 注意和上面的的autorestart=unexpected对应。。exitcodes里面的定义的
                                 退出码是expected的。
    ;stopsignal=QUIT               ; 进程停止信号,可以为TERM, HUP, INT, QUIT, KILL, USR1, or USR2等信号
                                  默认为TERM 。。当用设定的信号去干掉进程,退出码会被认为是expected
                                  非必须设置
    ;stopwaitsecs=10               ; 这个是当我们向子进程发送stopsignal信号后,到系统返回信息
                                 给supervisord,所等待的最大时间。 超过这个时间,supervisord会向该
                                 子进程发送一个强制kill的信号。
                                 默认为10秒。。非必须设置
    ;stopasgroup=false             ; 这个东西主要用于,supervisord管理的子进程,这个子进程本身还有
                                 子进程。那么我们如果仅仅干掉supervisord的子进程的话,子进程的子进程
                                 有可能会变成孤儿进程。所以咱们可以设置可个选项,把整个该子进程的
                                 整个进程组都干掉。 设置为true的话,一般killasgroup也会被设置为true。
                                 需要注意的是,该选项发送的是stop信号
                                 默认为false。。非必须设置。。
    ;killasgroup=false             ; 这个和上面的stopasgroup类似,不过发送的是kill信号
    ;user=chrism                   ; 如果supervisord是root启动,我们在这里设置这个非root用户,可以用来
                                 管理该program
                                 默认不设置。。。非必须设置项
    startretries = 3     ; 启动失败自动重试次数,默认是 3
    user = leon          ; 用哪个用户启动
    redirect_stderr = true  ; 把 stderr 重定向到 stdout,默认 false
    stdout_logfile_maxbytes = 20MB  ; stdout 日志文件大小,默认 50MB
    stdout_logfile_backups = 20     ; stdout 日志文件备份数
    ; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
    stdout_logfile = /var/log/test/test.log ; 需要手动创建
    ; 可以通过 environment 来添加需要的环境变量,一种常见的用法是修改 PYTHONPATH
    ; environment=PYTHONPATH=$PYTHONPATH:/path/to/somewhere  ;这个是该子进程的环境变量,和别的子进程是不共享的
    

    一个应用多个进程,使用不同的端口启动

    ;stdout_events_enabled=false   ; 当设置为ture的时候,当子进程由stdout向文件描述符中写日志的时候,将
                                 触发supervisord发送PROCESS_LOG_STDOUT类型的event
                                 默认为false。。。非必须设置
    ;stdout_capture_maxbytes=1MB   ; 这个东西是设定capture管道的大小,当值不为0的时候,子进程可以从stdout
                                 发送信息,而supervisor可以根据信息,发送相应的event。
                                 默认为0,为0的时候表达关闭管道。。。非必须项
    
    针对上述的配置,如果还想配置8110,8111,8112,8113端口总不可能每个都写一遍吧,那么这里就会有如下解决办法:
    [program:ycloud]
    command=sudo python /var/www/myapp/manage.py --port=811(process_num)d
    process_name=%(program_name)s-811%(process_num)d ; process_name expr (default %(program_name)s)
    numprocs=4                    ; number of processes copies to start (def 1)
    numprocs_start=1    
    或者可以这样写:
    [program:myapp]
    command=python /var/www/res/manage.py --port=%(process_num)s
    process_name=%(program_name)s_%(process_num)02d
    directory=/var/www/res
    numprocs_start=8110
    autorestart=true
    redirect_stderr=true
    stdout_logfile=/var/www/supervisor_log/log.txt
    

    web访问,远程管理进程的启动停止等

    设置web方式访问
    [inet_http_server]         ; inet (TCP) server disabled by default
    port=*:9001        ; (ip_address:port specifier, *:port for all iface)
    username=admin             ; (default is no username (open server))
    password=123               ; (default is no password (open server))
  • 相关阅读:
    一些牛逼的统计SQL
    一个有趣的 SQL 查询(查询7天连续登陆)
    Highcharts-3.0.6
    linux 下载并安装Memcache服务器端
    nginx + tomcat集群和动静资源分离
    C#中使用SendMessage在进程间传递数据的实例
    Wparam与Lparam的区别
    WPARAM和LPARAM的含义
    C# 使用SendMessage 函数
    在WinForm中使用Web Services 来实现 软件 自动升级( Auto Update ) (C#)
  • 原文地址:https://www.cnblogs.com/shengulong/p/10983013.html
Copyright © 2011-2022 走看看