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
    
    

   4、加入系统启动项

1、sudo touch  /lib/systemd/system/supervisord.service

2、vim  /lib/systemd/system/supervisord.service

[Unit]
Description=Supervisor daemon

[Service]
Type=forking
ExecStart=/usr/bin/supervisord -c /etc/supervisor/supervisord.conf
ExecStop=/usr/bin/supervisorctl shutdown -c /etc/supervisor/supervisord.conf
ExecReload=/usr/bin/supervisorctl reload -c /etc/supervisor/supervisord.conf
KillMode=process
Restart=on-failure
RestartSec=42s

[Install]
WantedBy=multi-user.target



3、sudo systemctl enable  supervisord


 * 问题

重启子进程不停止,可能是进程中有阻塞的线程,默认TERM方式不会停止,把配置文件中

stopsignal 改为INT

stopsignal

The signal used to kill the program when a stop is requested. This can be specified using the signal’s name or its number. It is normally one of: TERM, HUP, INT, QUIT, KILL, USR1, or USR2.

Default: TERM

Required: No.

Introduced: 3.0

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值