supervisor 使用教程,常见问题解决


简介:

Supervisord 是用 Python 实现的一款的进程管理工具,supervisord 要求管理的程序是非 daemon 程序,supervisord 会帮你把它转成 daemon 程序,因此如果用 supervisord 来管理进程,进程需要以非daemon的方式启动。

例如:管理nginx 的话,必须在 nginx 的配置文件里添加一行设置 daemon off 让 nginx 以非 daemon 方式启动

 

supervisor 非常实用  可以很好的管理进程, 包括自启动,服务器宕机恢复后自启动应用等

安装:  

yum install supervisor
会生成默认配置/etc/supervisord.conf 和目录 /etc/supervisord.d
/etc/supervisord.conf 顾名思义是supervisor的主要配置信息

/etc/supervisord.d     这个是一个文件夹, 里面可以自行新增 .ini文件  ini文件管理的进程组的配置,里面包括一些该进程管理的一些配置  这个文件夹是默认的文件夹,当然我们可以自己指定supervisor 管理的进程的配置目录 比如下面就是

修改/etc/supervisord.conf的最后一行 修supervisor管理进程组的配置目录

[include]
files = /opt/supervisord.d/*.ini   

上述地址可以自定义, 会读取/opt/supervisord.d 文件夹下 所有以 ini结尾的文件 作为进程配置读取,修改后 /etc/supervisord.d 这个文件夹就没用了 不过这里有一个默认的ini配置可以参考

然后再/opt/supervisord.d/  下新建一个配置 例如  test.ini

;进程名称 即项目名
[program:test]

;脚本目录 运行的进程文件目录
directory=/opt/ytgMateriel/materialBackend

;启动命令 此处为java的jar 启动命令
command=/opt/jdk1.8.0_171/bin/java -Xms512m -Xmx1024m -jar -Dspring.profiles.active=prd -Djava.io.tmpdir=./tmp -Dloader.path=lib ytg-material-backend.jar

;停止进程的命令 默认 quit
stopsignal=KILL

;supervisor启动的时候是否随着同时启动,默认True   
;当程序exit的时候,这个program不会自动重启,默认unexpected,设置子进程挂掉后自动重启的情况,有三个选项,false,unexpected和true。如果为false的时候,无论什么情况下,都不会被重新启动,如果为unexpected,只有当进程的退出码不在下面的exitcodes里面定义的 
autorestart=true
    
;这个选项是子进程启动多少秒之后,此时状态如果是running,则我们认为启动成功了。默认值为1
startsecs=3

;日志
stdout_logfile=/opt/ytgMateriel/materialBackend/logs/ytg-material-backend.log

;stdout日志文件大小,默认 50MB
stdout_logfile_maxbytes=100MB

;stdout日志文件备份数
stdout_logfile_backups=50
user = root

;把stderr重定向到stdout,默认 false
redirect_stderr=true

启动supervisord  supervisor主进程服务

方式一:  使用supervisor进程管理命令之前先启动supervisord,否则程序报错。supervisord -c /etc/supervisord.conf启动supervisor。

方式二:  若是centos7:

systemctl start supervisord.service     //启动supervisor并加载默认配置文件
systemctl enable supervisord.service    //将supervisor加入开机启动项

 

启动supervisord后就可以使用 supervisorctl 进行管理进程了

常用命令

supervisorctl status        //查看所有进程的状态
supervisorctl stop 进程名       //停止es
supervisorctl start 进程名      //启动es
supervisorctl restart  进程名      //重启es
supervisorctl update        //配置文件修改后使用该命令加载新的配置
supervisorctl reload        //重新启动配置中的所有程序

 

启动后 进程会自动启动, 查看日志是否正常

 

常见问题

1.Starting supervisor: Error: Another program is already listening on a port that one of our HTTP servers is configured to use. Shut this program down first before starting supervisord. For help, use /usr/bin/supervisord -h

解决:

显示的是有另一个进程占用了监听端口 查出来 kill

 ps -ef | grep supervisord
 kill -9  ***

2./usr/local/lib/python2.7/dist-packages/pkg_resources/py2_warn.py:21: UserWarning: Setuptools will stop working on Python 2

解决

pip2 install --upgrade --user pip

#使用pip 9.x或更高版本的Setuptools或固定setuptools<45在您的环境中

pip2 install --user "setuptools<45"

 

3.supervisor: couldn't chdir to /*****: ENOTDIR

解决 

检查ini配置 directory 参数是否正确

 

后面管理项目 直接 使用 supervisorctl  restart/ start /stop  项目名 即可 非常方便

 

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM