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

简介:

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

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

 

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

1,安装supervisor:  

执行以下命令: yum install supervisor


输入Y安装完成

 

2使用supervisor

2.1 配置文件介绍

安装完成后会生成默认配置文件/etc/supervisord.conf 和目录 /etc/supervisord.d

2.1.1

/etc/supervisord.conf 主要是supervisor的主要配置信息

**需要重点关注的是这里, [include] files = *******  默认的的值是/etc/supervisord.d/*.ini   这个配置的意思是指定需要管理的进程组的配置文件包括了/opt/supervisord.d/文件夹下面的 所有的以 ini结尾的配置文件, 每一个ini可以理解为一个服务组就是你要管理的应用的进程
 
** 这里建议把这里修改到自己应用文件夹 方便调整 比如修改为 图中  /opt/supervisord.d/*ini
例如:
[include]
files = /opt/supervisord.d/*.ini    supervisor会读取这个文件夹下的所有的 以ini结尾的配置作为管理进程的服务
 

2.1.2

/etc/supervisord.d 也是默认生成的文件夹,如果修改了上面的配置 这个文件夹里面的配置就不会被读取,     提醒  这里面有一个默认的ini配置可以参考

 

这里假设你和我一样修改了  [include] files =/opt/supervisord.d/*.ini   然后再/opt/supervisord.d/  下新建一个配置 例如  test.ini

如果你没有修改[include] files 那么你需要在/etc/supervisord.d下修改 或者创建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

上面的配置就会管理一个 test程序, test是服务的名字,后面管理启动 停止都会用到 建议名字和应用的包名一致,

一切就绪后我们就可以来启动supervisor

 

2.2

启动supervisord  supervisor主进程服务, 一定要先启动主服务,才可以管理你的 [test]程序, 就好比你在你的电脑安装了植物大战僵尸,你想启动植物大战僵尸之前你必须先启动电脑一样,这里的主程序就是我们刚刚安装的程序,先启动他

方式一:  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  项目名 即可 非常方便

 

 

posted @ 2022-03-02 14:12  loveCrane  阅读(2204)  评论(0编辑  收藏  举报