CentOS7下Supervisor安装与配置

1.安装
主机环境:(Centos7)
[root@localhost ~]# cat /proc/version
Linux version 3.10.0-229.el7.x86_64 (builder@kbuilder.dev.centos.org) (gcc version 4.8.2 20140120 (Red Hat 4.8.2-16) (GCC) ) #1 SMP Fri Mar 6 11:36:42 UTC 2015
[root@localhost ~]# yum install python-setuptools
[root@localhost ~]# easy_install supervisor
测试安装是否成功:(有以下配置文件说明安装成功了)
[root@localhost ~]# echo_supervisord_conf
; Sample supervisor config file.
;
; For more information on the config file, please see:
; http://supervisord.org/configuration.html
;
; Notes:
;  - Shell expansion ("~" or "$HOME") is not supported.  Environment
;    variables can be expanded using this syntax: "%(ENV_HOME)s".
;  - Quotes around values are not supported, except in the case of
;    the environment= options as shown below.
;  - Comments must have a leading space: "a=b ;comment" not "a=b;comment".
;  - Command will be truncated if it looks like a config file comment, e.g.
;    "command=bash -c 'foo ; bar'" will truncate to "command=bash -c 'foo ".

[unix_http_server]
file=/tmp/supervisor.sock   ; the path to the socket file
;chmod=0700                 ; socket file mode (default 0700)
;chown=nobody:nogroup       ; socket file uid:gid owner
;username=user              ; default is no username (open server)
;password=123               ; default is no password (open server)

;[inet_http_server]         ; inet (TCP) server disabled by default
;port=127.0.0.1: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)

...
2.创建配置文件
创建supervisor配置文件目录/etc/supervisor/
[root@localhost ~]# mkdir -m 755 -p /etc/supervisor/
[root@localhost ~]# cd /etc/
[root@localhost etc]# ll |grep supervisor
drwxr-xr-x   3 root root     42 Jul 11 11:09 supervisor
创建主配文件supervisord.conf
[root@localhost etc]# echo_supervisord_conf > /etc/supervisor/supervisord.conf
[root@localhost etc]# cd supervisor/
[root@localhost supervisor]# ll
total 12
-rw-r--r-- 1 root root 9186 Jul 11 11:09 supervisord.conf
创建项目配置文件目录
[root@localhost supervisor]# mkdir -m 755 conf.d
[root@localhost supervisor]# ll
total 12
drwxr-xr-x 2 root root   37 Jul 11 10:20 conf.d
-rw-r--r-- 1 root root 9186 Jul 11 11:09 supervisord.conf
3.调试
在/data/wwwroot/supervisor_simple 目录下创建test.c
[root@localhost ~]# vim /data/wwwroot/supervisor_simple/test.c
#include<stdio.h>
#include<string.h>
int main() {
  FILE *fp = fopen("/data/wwwroot/supervisor_simple/1.txt", "a+");
  if(fp==0){
    printf("can't open file\n");
    return 0;
  }

  int ix = 0;
  for(;; ix++){
    fseek(fp, 0, SEEK_END);
    char s_add_arr[10];
    memset(s_add_arr, '\0', 10);
    sprintf(s_add_arr, "%i\n", ix);
    fwrite(s_add_arr, strlen(s_add_arr), 1, fp);
    
    sleep(1);	
  }

  fclose(fp);
  return 0;
}
 编译为test
[root@localhost ~]# cd /data/wwwroot/supervisor_simple/
[root@localhost supervisor_simple]# gcc -o test test.c
在/etc/supervisor/conf.d 目录下创建 test.ini
[root@localhost ~]# cd /etc/supervisor/conf.d/
[root@localhost conf.d]# # vim test.ini
[program:test]
command=/data/wwwroot/supervisor_simple/test
stdout_logfile=/tmp/test_stdout.log;
autostart=true
autorestart=true
startsecs=5
priority=1
stopasgroup=true
killasgroup=true
在主配文档中引入test.ini
[root@localhost supervisor]# vim supervisord.conf
//找到include
;[include]
;files = relative/directory/*.ini
//改为
[include]
files = ./conf.d/*.ini
启动supervisor
[root@localhost supervisor]# supervisord -c supervisord.conf 
Unlinking stale socket /tmp/supervisor.sock
[root@localhost supervisor]# pstree
systemd─┬─NetworkManager─┬─dhclient
        │                └─3*[{NetworkManager}]
        ├─VBoxService───7*[{VBoxService}]
        ├─agetty
        ├─auditd───{auditd}
        ├─crond
        ├─dbus-daemon
        ├─lvmetad
        ├─memcached───6*[{memcached}]
        ├─mysqld_safe───mysqld───23*[{mysqld}]
        ├─nginx───nginx
        ├─php-fpm───11*[php-fpm]
        ├─polkitd───5*[{polkitd}]
        ├─pure-ftpd
        ├─redis-server───2*[{redis-server}]
        ├─rsyslogd───2*[{rsyslogd}]
        ├─sshd─┬─sshd───bash───pstree
        │      ├─6*[sshd───sftp-server]
        │      └─sshd───bash
        ├─supervisord───test
        ├─systemd-journal
        ├─systemd-logind
        ├─systemd-udevd
        └─tuned───4*[{tuned}]
[root@localhost supervisor]# pstree -p | grep supervisord
           |-supervisord(6271)---test(6281)
[root@localhost supervisor]#
查看supervisord.log发现program test已启动
[root@localhost supervisor]# cat /tmp/supervisord.log
2017-07-11 10:47:33,440 CRIT Supervisor running as root (no user in config file)
2017-07-11 10:47:33,440 INFO Included extra file "/etc/supervisor/./conf.d/test.ini" during parsing
2017-07-11 10:47:33,480 INFO RPC interface 'supervisor' initialized
2017-07-11 10:47:33,480 CRIT Server 'unix_http_server' running without any HTTP authentication checking
2017-07-11 10:47:33,481 INFO daemonizing the supervisord process
2017-07-11 10:47:33,481 INFO supervisord started with pid 6572
2017-07-11 10:47:34,486 INFO spawned: 'test' with pid 6582
2017-07-11 10:47:39,532 INFO success: test entered RUNNING state, process has stayed up for > than 5 seconds (startsecs)
2017-07-11 11:10:06,249 INFO waiting for test, skuld to die
2017-07-11 11:10:06,251 INFO stopped: test (terminated by SIGTERM)
用 supervisorctl 查看已经被监控的program
[root@localhost supervisor]# supervisorctl 
test                             RUNNING   pid 6735, uptime 3:08:29
supervisor>
注:直接用运行supervisorctl命令没效果的话,换成下面的命令。效果一样
[root@localhost supervisor]# supervisorctl -c /etc/supervisor/supervisord.conf
test                             RUNNING   pid 6735, uptime 3:08:29
supervisor>
增加一例监控php脚本
[root@localhost supervisor]# cd conf.d/
[root@localhost conf.d]# vim skuld.ini
[program:skuld]
command=php -f /data/wwwroot/supervisor_simple/skuld.php 
stdout_logfile=/tmp/skuld_stdout.log;
autostart=true
autorestart=true
startsecs=5
priority=1
stopasgroup=true
killasgroup=true
在/data/wwwroot/supervisor_simple目录下创建skuld.php
<?php
$fn = fopen('/data/wwwroot/supervisor_simple/skuld.log', 'a');
$i = 0;
while(1){
  sleep(1);
  fwrite($fh, $i++ . "\n");
}
fclose($fn);
重启监控服务
[root@localhost conf.d]# supervisorctl reload
Restarted supervisord
[root@localhost conf.d]# pstree
systemd─┬─NetworkManager─┬─dhclient
        │                └─3*[{NetworkManager}]
        ├─VBoxService───7*[{VBoxService}]
        ├─agetty
        ├─auditd───{auditd}
        ├─crond
        ├─dbus-daemon
        ├─lvmetad
        ├─memcached───6*[{memcached}]
        ├─mysqld_safe───mysqld───23*[{mysqld}]
        ├─nginx───nginx
        ├─php-fpm───11*[php-fpm]
        ├─polkitd───5*[{polkitd}]
        ├─pure-ftpd
        ├─redis-server───2*[{redis-server}]
        ├─rsyslogd───2*[{rsyslogd}]
        ├─sshd─┬─2*[sshd───bash]
        │      ├─6*[sshd───sftp-server]
        │      └─sshd───bash───pstree
        ├─supervisord─┬─php
        │             └─test
        ├─systemd-journal
        ├─systemd-logind
        ├─systemd-udevd
        └─tuned───4*[{tuned}]
[root@localhost conf.d]#

===========================重点==================================
1. supervisor 比较适合监控业务应用,且只能监控前台程序,php fork方式实现的daemon不能用它监控,否则supervisor> status 会提示:BACKOFF  Exited too quickly (process log may have details)

 

2.每次修改配置文件后需进入supervisorctl,执行reload, 改动部分才能生效。

 

3.两个命令
supervisord : supervisor的服务器端部分,用于supervisor启动。
supervisorctl:启动supervisor的命令行窗口,在该命令行中可执行start、stop、status、reload等操作。

 

3.web管理界面
将supervisord.conf中[inet_http_server]部分做相应配置,在supervisorctl中reload即可启动web管理界面。
;[inet_http_server]         ; inet (TCP) server disabled by default
;port=127.0.0.1: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))

修改成:

[inet_http_server]         ; inet (TCP) server disabled by default
port=127.0.0.1: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))

port:绑定访问IP和端口,这里是绑定的是本地IP和9001端口(写上你自己的服务器IP或是本地IP)
username:登录管理后台的用户名
password:登录管理后台的密码
4.如果9001端口拒绝访问,服务器允许9001端口访问 ,保存iptables规则 。
[root@localhost ~]# iptables -I INPUT 4 -p tcp -m state --state NEW -m tcp --dport 9001 -j ACCEPT
[root@localhost ~]# service iptables save 
访问web管理界面

您可以选择一种方式赞助本站

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: