07月31, 2021

Supervisor安装教程

一、安装

  1. apt install supervisor

如果不是root账号,需要对这些目录进行权限设置,要不然会因权限问题报一些错误
sudo chmod 777 /var/run
sudo chmod 777 /etc/supervisor

二、配置

1、配置目录为:

  1. /etc/supervisor

2、配置文件为:

  1. /etc/supervisor/supervisord.conf

3、默认会自动载入子配置文件目录下的配置信息:

  1. /etc/supervisor/conf.d/*.conf

4、使用echo_supervisord_conf可生成默认的配置文件:

  1. echo_supervisord_conf > /etc/supervisor/supervisord.conf

5、配置文件讲解:

  1. [unix_http_server]
  2. file=/tmp/supervisor.sock ;UNIX socket 文件,supervisorctl 会使用
  3. ;chmod=0700 ;socket文件的mode,默认是0700
  4. ;chown=nobody:nogroup ;socket文件的owner,格式:uid:gid
  5. ;[inet_http_server] ;HTTP服务器,提供web管理界面
  6. ;port=127.0.0.1:9001 ;Web管理后台运行的IP和端口,如果开放到公网,需要注意安全性
  7. ;username=user ;登录管理后台的用户名
  8. ;password=123 ;登录管理后台的密码
  9. [supervisord]
  10. logfile=/tmp/supervisord.log ;日志文件,默认是 $CWD/supervisord.log
  11. logfile_maxbytes=50MB ;日志文件大小,超出会rotate,默认 50MB,如果设成0,表示不限制大小
  12. logfile_backups=10 ;日志文件保留备份数量默认10,设为0表示不备份
  13. loglevel=info ;日志级别,默认info,其它: debug,warn,trace
  14. pidfile=/tmp/supervisord.pid ;pid 文件
  15. nodaemon=false ;是否在前台启动,默认是false,即以 daemon 的方式启动
  16. minfds=1024 ;可以打开的文件描述符的最小值,默认 1024
  17. minprocs=200 ;可以打开的进程数的最小值,默认 200
  18. [supervisorctl]
  19. serverurl=unix:///tmp/supervisor.sock ;通过UNIX socket连接supervisord,路径与unix_http_server部分的file一致
  20. ;serverurl=http://127.0.0.1:9001 ; 通过HTTP的方式连接supervisord
  21. ; [program:xx]是被管理的进程配置参数,xx是进程的名称
  22. [program:xx]
  23. command=/opt/apache-tomcat-8.0.35/bin/catalina.sh run ; 程序启动命令
  24. autostart=true ; supervisord启动的时候也自动启动
  25. startsecs=10 ; 启动10秒后没有异常退出,就表示进程正常启动了,默认为1
  26. autorestart=true ; 程序退出后自动重启,可选值:[unexpected,true,false],默认为unexpected,表示进程意外杀死后才重启
  27. startretries=3 ; 启动失败自动重试次数,默认是3
  28. user=tomcat ; 用哪个用户启动进程,默认是root
  29. priority=999 ; 进程启动优先级,默认999,值小的优先启动
  30. redirect_stderr=true ; stderr重定向到stdout,默认false
  31. stdout_logfile_maxbytes=20MB ; stdout 日志文件大小,默认50MB
  32. stdout_logfile_backups = 20 ; stdout 日志文件备份数,默认是10
  33. ; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
  34. stdout_logfile=/opt/apache-tomcat-8.0.35/logs/catalina.out
  35. stopasgroup=false ;默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程
  36. killasgroup=false ;默认为false,向进程组发送kill信号,包括子进程
  37. ;包含其它配置文件
  38. [include]
  39. files = relative/directory/*.ini ;可以指定一个或多个以.ini结束的配置文件,建议使用*.conf不要用*.ini

三、服务管理

  1. # 停止某个进程
  2. supervisorctl stop program_name
  3. # 启动某个进程
  4. supervisorctl start program_name
  5. # 重启某个进程
  6. supervisorctl restart program_name
  7. # 停止全部进程
  8. supervisorctl stop all
  9. # 载入最新的配置文件,停止原有进程并按新的配置启动、管理所有进程
  10. supervisorctl reload
  11. # 根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启
  12. supervisorctl update
  13. # 查看所有子进程的状态
  14. supervisorctl status

四、使用方法

1、在command中,执行.sh脚本

请参照此配置文件中command的写法,直接写command=source xxx,会报source不认识:

  1. [program:blog]
  2. command=/bin/bash -c 'source /var/ftp_root/program/blog/startall.sh'
  3. user=root
  4. autostart=true
  5. autorestart=true
  6. redirect_stderr=True
  7. stdout_logfile=/tmp/blog.log
  8. stderr_logfile=/tmp/blog.err
  9. stopasgroup=true
  10. killasgroup=true
  1. [program:blog]
  2. command=/bin/bash -c 'source /var/ftp_root/program/blog/startall.sh'
  3. directory=/var/ftp_root/program/blog/
  4. autorestart=true
  5. startsecs=3
  6. startretries=3
  7. stdout_logfile=var/ftp_root/program/blog/log/blog.out.log
  8. stderr_logfile=var/ftp_root/program/blog/log/blog.err.log
  9. stdout_logfile_maxbytes=2MB
  10. stderr_logfile_maxbytes=2MB
  11. user=www
  12. priority=999
  13. numprocs=1
  14. process_name=%(program_name)s_%(process_num)02d

2、配置说明

  1. # 检查自己增加的程序配置文件中,是否增加了log的配置,没有的话,要加上。
  2. stdout_logfile=/tmp/blog.log
  3. stderr_logfile=/tmp/blog.err
  4. # 默认为 false,如果设置为 true,当进程收到 stop 信号时,会自动将该信号发给该进程的子进程。如果这个配置项为 true,那么也隐含 killasgroup 为 true。例如在 Debug 模式使用 Flask 时,Flask 不会将接收到的 stop 信号也传递给它的子进程,因此就需要设置这个配置项。
  5. stopasgroup=false ; send stop signal to the UNIX process
  6. # 默认为 false,如果设置为 true,当进程收到 kill 信号时,会自动将该信号发给该进程的子进程。如果这个程序使用了 python 的 multiprocessing 时,就能自动停止它的子线程。
  7. killasgroup=false ; SIGKILL the UNIX process group (def false)

本文链接:https://lxyit.com/article/show/238.html

-- EOF --