专栏首页二狗的DBA之路supervisor学习笔记

supervisor学习笔记

官方手册:http://www.supervisord.org/

安装 supervisor可以采用快捷的安装方式如下:

yum install python-setuptools -y

easy-install supervisor 或者pip install supervisor

下面是编译安装的步骤:

以CentOS6.7为例,原始安装包存放在/home/tools/supervisor/src下。

下面是一个自动安装的脚本:

文件目录结构如下:

├── install.sh

└── src

└── supervisor-3.3.1.tar.gz

install.sh内容如下:

#!/bin/bash

#auto install supervisor-3.3.1

yum install python-setuptools -y

tar xf src/supervisor-3.3.1.tar.gz  -C src/

cd src/supervisor-3.3.1

python setup.py install

echo_supervisord_conf > /etc/supervisord.conf

if[ $? = 0 ];then

    echo -e "---------- $(date +"%F%T") installed supervisor Success. --------------\n" | tee -a../../install.log

else

    echo -e "---------- $(date +"%F%T") installed supervisor Failed. --------------\n" | tee -a ../../install.log

fi

简单的配置supervisor:

vim  /etc/supervisord.conf 在最后添加上如下的内容:

[program:redis]

;注意:使用supervisor 来监控redis自启动的话,必须设置为前台redis运行,不然会报错。

command=/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis.conf

autorstart=true

autorestart=true

stdout_logfile=/tmp/supervisor.log

[inet_http_server]                                                                                                           

;warning:itis better add one iptables rule to deny others access 9001 port

port=*:9001

username=root

password=123456

执行 supervisord -c /etc/supervisord.conf 即可启动守护进程

执行:supervisorctl status 即可列出服务的状态。

redis             RUNNING   pid 19135, uptime 0:03:42

注意:

    supervisor 比较适合监控业务应用,且只能监控前台程序(进程必须以非daemon方式运行),php fork方式实现的daemon不能用它监控,

否则supervisor> status 会提示:BACKOFF  Exited too quickly(process log may have details)

经过适当的修改后,redis、nginx、mysql、tomcat都可以使用supervisor来监控。

注意:

每次修改完/etc/supervisord.conf ,需要执行supervisorctl reload来重启supervisord进程,不然修改的配置无法生效。

启动supervisord

       supervisord -c /etc/supervisord.conf

关闭supervisord

       supervisorctl shutdown

重新载入配置

       supervisorctl reload

supervisor组件说明:

    supervisord

       supervisord是supervisor的服务端程序。

干的活:启动supervisor程序自身,启动supervisor管理的子进程,响应来自clients的请求,重启闪退或异常退出的子进程,把子进程的stderr或stdout记录到日志文件中,生成和处理Event

    supervisorctl

这东西还是有点用的,如果说supervisord是supervisor的服务端程序,那么supervisorctl就是client端程序了。

       supervisorctl有一个类型shell的命令行界面,我们可以利用它来查看子进程状态,启动/停止/重启子进程,获取running子进程的列表等等。。。

最牛逼的一点是,supervisorctl不仅可以连接到本机上的supervisord,还可以连接到远程的supervisord,当然在本机上面是通过UNIX socket连接的。

       supervisorctl和supervisord之间的通信,是通过xml_rpc完成的,远程是通过TCP socket连接的。

       supervisorctl和supervisord之间的通信,是通过xml_rpc完成的。相应的配置在[supervisorctl]块里面

    Web Server

       Web Server主要可以在界面上管理进程,Web Server其实是通过XML_RPC来实现的,可以向supervisor请求数据,也可以控制supervisor及子进程。配置在[inet_http_server]块里面

    XML_RPC接口

这个就是远程调用的,上面的supervisorctl和Web Server就是它弄的

#####下面是几个测试没问题的样例,自己测试supervisor启动 redis mysqld nginx tomcat都没问题。

[inet_http_server]

;注意:需要配置防火墙只允许公司的IP访问9001端口

port=*:9001

username=sup_admin

password=flzxsqc@!@#$

[program:redis]

;注意:使用 supervisor 来监控redis自启动的话,必须设置daemonize no,不然会报错。

command=/usr/local/redis/bin/redis-server/usr/local/redis/etc/redis.conf

autorstart=true

autorestart=true

stdout_logfile=/tmp/supervisor_redis.log

[program:mariadb]

command=/usr/local/mariadb/bin/mysqld --basedir=/usr/local/mariadb --datadir=/data/ mysql--plugin-dir=/usr/local/mariadb/lib/plugin --user=mariadb --log-error=/data/mysql/mariadb.err --pid-file=/data/mysql/mariadb.pid --socket=/tmp/mysql.sock --port=3306

autostart=true

autorestart=true

stdout_logfile=/tmp/supervisor_mariadb.log

[program:nginx]

;注意:使用 supervisor 来监控nginx自启动的话,必须修改nginx.conf 在前几行添加上daemon off;

command=/usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

autostart=true

autorestart=true

sutdout_logfile=/tmp/supervisor_nginx.log

[program:tomcat7]

command=/usr/local/tomcat/bin/catalina.sh run

autorstart=true

user=webserver

autorestart=true

stdout_logfile=/tmp/supervisor_tomcat7.log

做到这里,还要给supervisor添加个开机自启动啊。

各种自启动脚本的地址:https://github.com/Supervisor/initscripts

下面是一个自己写的功能简陋的脚本:

#!/bin/bash
# chkconfig: 345 83 04
# description: Supervisor start stop script
start() {
/usr/bin/supervisord -c /etc/supervisord.conf
}
stop() {
/usr/bin/supervisorctl shutdown
}
restart() {
stop
start
}
reload() {
/usr/bin/supervisorctl reload
}
case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    restart)
        restart
        ;;
    reload)
            reload
            ;;
    *)
        echo $"Usage: $0 {start|stop|restart|reload}"
esac

其它的可以参考下面2篇文章:

http://lixcto.blog.51cto.com/4834175/1539136 

http://www.phpddt.com/php/supervisor.html

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 给redis cluster集群加上认证功能

    接上一篇博客:http://lee90.blog.51cto.com/10414478/1863242

    二狗不要跑
  • 使用redis-shake 进行redis的数据同步或迁移操作

    redis-shake 是阿里开源的一个redis 同步工具(redis-migrate-tool比较老了,对一些命令的支持不好,并且官方的版本对应4.X的直接...

    二狗不要跑
  • redis cluster官方集群的搭建笔记

    https://www.zybuluo.com/phper/note/195558

    二狗不要跑
  • 绘制流程图的两种方法

    对于上班族可以使用流程图对某项工作操作过程绘制流程图进行归纳。对于科研工作者会将实验流程清晰的记录下来保证整个实验思维清晰,对于求职者可以将简历用流程图样式进行...

    用户5791017
  • 玩转数据处理120题|R语言版本

    大家好,本文为R语言数据处理120题系列完整版本。作者精心挑选120道数据处理中相关操作以习题形式发布,一共涵盖了数据处理、计算、可视化等常用操作,并对部分题目...

    刘早起
  • python爬取小视频

    通过这段代码,我们可以考虑分析。在python代码中用一段存放描述内容,一段存放视频所在的url 对于每个url地址,通过urllib所提供的urlr...

    py3study
  • 窝窝转型上市 竟是团购市场的利空?

    一波三折,窝窝终于还是上市了。2011年,在千团大战中脱颖而出的窝窝团曾传出上市消息,最终因资本市场整体遇冷不了了之。这一次的成功上市也是历经坎坷:频频被预测上...

    罗超频道
  • elk+filebeat+grafana日志收集平台学习笔记

    node1:elasticsearch6.4+filebeat node2:kibana6.4+grafana+filebeat node3:logstash+...

    没有故事的陈师傅
  • 【Nature】AlphaGo赢了围棋,但玩量子计算游戏人的直觉强过机器

    ? Quantum Moves游戏过程 来源:nature.com 【新智元导读】Nature日前刊发论文,丹麦奥胡斯大学的科学家设计了一款量子计算游戏,...

    新智元
  • VR版《生化危机7》(第三话):Ethan真是一个不讨岳母喜欢的女婿

    VRPinea

扫码关注云+社区

领取腾讯云代金券