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 = /opt/supervisord.d/*.ini supervisor会读取这个文件夹下的所有的 以ini结尾的配置作为管理进程的服务
2.1.2
默认的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 项目名 即可 非常方便