Supervisor ---业务应用进程 进程管理工具
Supervisor 是一个用 Python 实现的进程管理工具,可以很方便地启动,关闭,重启,查看,以及监控进程,当进程由于某种原因崩溃或者被误杀后,可以自动重启并发送事件通知。Supervisor 可谓运维利器,使用 Supervisor 来管理进程,可以提高系统的高可用特性。
参考可见:
1、https://leehao.me/%E4%BD%BF%E7%94%A8-Supervisor-%E6%9D%A5%E7%AE%A1%E7%90%86-Redis-%E8%BF%9B%E7%A8%8B/?hmsr=toutiao.io&utm_medium=toutiao.io&utm_source=toutiao.io
2、http://www.linuxidc.com/Linux/2012-11/73832.htm
环境安装需求:
1、python环境(正常的centos系统都已经有了python环境)
2、python-meld3 扩展
具体安装过程:
1、到官网下载最新的supervisor安装包: https://pypi.python.org/pypi/supervisor #新建一个目录 mkdir /home/supervisor #下载源码包 wget https://pypi.python.org/packages/31/7e/788fc6566211e77c395ea272058eb71299c65cc5e55b6214d479c6c2ec9a/supervisor-3.3.3.tar.gz #解压 tar -zxvf supervisor-3.3.3.tar.gz #执行安装 cd /home/supervisor/supervisor-3.3.3 python setup.py install
此时发现报错:
原因:没有安装python的管理工具
那就下载安装一个咯:
wget https://pypi.io/packages/source/s/setuptools/setuptools-33.1.1.zip unzip setuptools-33.1.1.zip cd setuptools-33.1.1 python setup.py install
#返回supervisor-3.3.3
cd /home/supervisor/supervisor-3.3.3
python setup.py install
生成配置文件
cd /home/supervisor/supervisor-3.3.3 #生成配置文件 echo_supervisord_conf > /etc/supervisord.conf #按需求修改配置文件 [inet_http_server] ; inet (TCP) server disabled by default port=192.168.96.26:9001 ; ip_address:port specifier, *:port for all iface username=user ; default is no username (open server) password=123 ; default is no password (open server) [include] ;files = relative/directory/*.ini files = /home/supervisor/conf*.conf #说明:目前我单独新建的配置文件放在/home/supervisor/conf目录下。
启动supervisor:
cd /home/supervisor/supervisor-3.3.3 supervisord -c /etc/supervisord.conf
验证是否安装成功
http://192.168.96.26:9001/
user/123
注意事项:
1、supervisor启动命令:---使用这个命令时,最后确保python相关进程已关闭
supervisorctl -c /etc/supervisor/supervisord.conf
2、使用如下命令载入新的 工程配置:
supervisorctl reload
3、supervisor 比较适合监控业务应用,且只能监控前台程序,php fork方式实现的daemon不能用它监控,否则supervisor> status 会提示:BACKOFF Exited too quickly (process log may have details)
4、2.两个命令
supervisord : supervisor的服务器端部分,用于supervisor启动
supervisorctl:启动supervisor的命令行窗口,在该命令行中可执行start、stop、status、reload等操作。
如:
(1)重新加载:supervisorctl reload。
(2)停止进程:supervisorctl stop hello---hello为进程名(工程名不要后缀)
我的疑问:
1、如何监控一个java进程??????
2、如添加非本机的php进程监控?
遇到的问题:问题1 2 其实可解决可不解决。
1、添加了工程,重启supervisor,执行命令:supervisorctl -c /etc/supervisor/supervisord.conf:
提示:Unlinking stale socket /tmp/supervisor.sock
解决:这个时候需要安装python的功能组件python-meld3,安装的时候需要先停掉python进程,不然会安装失败
2、在问题1 之后,通过命令 yum install python-meld3时又发现:
Error: Cannot retrieve metalink for repository: epel. Please verify its path and try again。
原因是:无法加载源(下不到python-meld3)。
解决:修改文件“/etc/yum.repos.d/epel.repo”, 将baseurl的注释取消, mirrorlist注释掉,然后在重新执行安装命令
3、添加了配置文件:
[program:kmplatform-CustomerPalshipFind]
command=nohup /usr/local/php/bin/php -c /usr/local/php/lib/php.ini /usr/local/nginx/kmplatform/artisan Worker:CustomerPalshipFind ; the program (relative uses PATH, can take args)
process_name=%(program_name)s_%(process_num)02d ; process_name expr (default %(program_name)s)
numprocs=1 ; number of processes copies to start (def 1)
autostart=true ; start at supervisord start (default: true)
autorestart=true ; whether/when to restart (default: unexpected)
发现重启supervisor后,一直异常backoff,查看tail -f 日志显示的是“command too many aguments,expected agument ...”
网上一直搜不到原因。
自己怀疑是执行命令错误。于是尝试了下,单独执行命令:
nohup /usr/local/php/bin/php -c /usr/local/php/lib/php.ini /usr/local/nginx/kmplatform/artisan Worker:CustomerPalshipFind
然而并没有问题。
想想是不是命令行+注释太长了,于是把末尾的注释给去掉; the program (relative uses PATH, can take args)
结果,居然完美的解决了!!!
5、问题及解决方案
http://blog.csdn.net/wawa8899/article/details/52743861
6、问题及解决方案
https://www.jianshu.com/p/3fe84e259ef9