supervisor的安装与配置

*、配置说明地址:
    http://supervisord.org/configuration.html#program-x-section-settings
    
*supervisor主要功能说明:
    a、可以监控进程是否死掉,自动重启
    b、可以管理进程的启动,停止
    c、可以对进程输出的日志进行管理,备份(自动重启)
    
*、安装supervisor插件
    把supervisord.conf拷贝到/etc/supervisor
    
*、创建配置文件目录
    mkdir -p /etc/supervisor/conf.d/
    
*、supervisord.conf 里面加入程序配置段,配置脚本启动
    [include] #把每个应用的文件包含进来,后续好扩展
    files = /etc/supervisor/conf.d/*.conf


    编辑一份配置文件
    vim /etc/supervisor/conf.d/test.conf
    [program:test]
    directory = python test.py ; 程序的启动目录
    command = /var/www/test/  ; 启动命令,可以看出与手动在命令行启动的命令是一样的
    autostart = true     ; 在 supervisord 启动的时候也自动启动
    startsecs = 5        ; 启动 5 秒后没有异常退出,就当作已经正常启动了
    autorestart = true   ; 程序异常退出后自动重启
    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
    
 
*、服务端管理
    a、启动服务端
    /usr/local/python27/bin/supervisord -c /etc/supervisor/supervisord.conf
    b、关掉服务端
    /usr/local/python27/bin/supervisorctl shutdown
    c、重启某一个被管理的进程 xxx 为supervisor配置的进程说明
    /usr/local/python/bin/supervisorctl restart xxx
    d、登入supervisor命令管理
        [test@server1 conf.d]$ supervisorctl 
        test_service   RUNNING   pid 3131, uptime 8 days, 22:56:25
        supervisor> reload all
        Really restart the remote supervisord process y/N? y
        Restarted supervisord
        supervisor> help
        
        default commands (type help <topic>):
        =====================================
        add    exit      open  reload  restart   start   tail   
        avail  fg        pid   remove  shutdown  status  update 
        clear  maintail  quit  reread  signal    stop    version
    
    
*、设置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))


    
*、添加或者修改配置文件后,需要重新加载
    /usr/local/python27/bin/supervisorctl reload
    
    
*、配置多个进程
    针对上述的配置,如果还想配置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
    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


*、不通过root启动
    修改用户
    [supervisord]
    user=user1    ; (default is current user, required if root)
    
    [supervisorctl]
    username=user1   ; should be same as http_username if set
    
*、启动程序
    /usr/local/python27/bin/supervisorctl help
    /usr/local/python27/bin/supervisorctl start app
    /usr/local/python27/bin/supervisorctl start all
    /usr/local/python27/bin/supervisorctl stop app
    /usr/local/python27/bin/supervisorctl stop all


*有时候不用root权限启动不了
    supervisor: couldn't setuid to 0: Can't drop privilege as nonroot user
    则用root启动
    
*同一台服务器上面使用不同的用户启动服务
    1、supervisord.conf 中的用户改为root
    2、配置文件中使用不同的用户,举例如下:
        [program:test1]
        command=python script1.py
        directory=/your_path/
        autostart = true
        startsecs = 5
        user=user1
        redirect_stderr = true
        stdout_logfile_maxbytes = 20MB
        stdout_logfile_backups = 20
        stdout_logfile =/your_path/log/test1.log
        
        [program:test1]
        command=python script2.py
        directory=/your_path/
        autostart = true
        startsecs = 5
        user=user2
        redirect_stderr = true
        stdout_logfile_maxbytes = 20MB
        stdout_logfile_backups = 20
        stdout_logfile =/your_path/log/test2.log
        
    3、用root启动supervisor服务 /usr/local/python27/bin/supervisord -c /etc/supervisor/supervisord.conf
    
        

猜你喜欢

转载自blog.csdn.net/pengwupeng2008/article/details/51955173