supervisor安装使用和我踩过的坑

时间:2023-03-09 15:48:23
supervisor安装使用和我踩过的坑

什么是supervisor:

supervisor是一款用python编写的进程管理工具,主要运行于linux系统,不支持windows系统,目前还不能运行于python3下。

step1:安装supervisor

yum -y install python-pip
pip install supervisor==3.3.4

step2:生成配置文件

echo_supervisord_conf > /etc/supervisord.conf

这条命令会为我们自动生成配置文件 ,我一般用自己改好的配置文件,如下:

[root@ec2-54-218-126-221 ~]# cat /etc/supervisord.conf
[unix_http_server]
file=/var/run/supervisor.sock   ; the path to the socket file

[supervisord]
logfile=/data/logs/supervisor/supervisord.log ; main log file; default $CWD/supervisord.log
logfile_maxbytes=50MB        ; max main logfile bytes b4 rotation; default 50MB
logfile_backups=10           ; # of main logfile backups; 0 means none, default 10
loglevel=info                ; log level; default info; others: debug,warn,trace
pidfile=/var/run/supervisord.pid ; supervisord pidfile; default supervisord.pid
nodaemon=false               ; start in foreground if true; default false
minfds=1024                  ; min. avail startup file descriptors; default 1024
minprocs=200                 ; min. avail process descriptors;default 200

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]
serverurl=unix:///var/run/supervisor.sock ; 如果这里的路径是/tmp/...应该改成/var/run/..因为系统默认定期对/tmp下文件进行删除,supervisor会出错的。

[include]
files = /etc/supervisor/conf.d/*.conf ;我一般把每个要管理的进程单独写成一个配置文件,放在此目录中

注意:注意我标红的那一行,默认生成的serverurl=unix路径应该在/tmp下,这时应该手动修改它。

step3:编写sysV启动文件

#!/bin/bash
# chkconfig: 2345 80 80
. /etc/init.d/functions

DAEMON=/usr/bin/supervisord
PIDFILE=/var/run/supervisord.pid

[ ! -f $DAEMON ] && DAEMON=/usr/local/bin/supervisord
# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0

start() {
        echo -n "Starting supervisord: "
        ulimit -n 65536
        daemon --pidfile $PIDFILE $DAEMON --pidfile $PIDFILE -c /etc/supervisord.conf
        RETVAL=$?
        echo
        [ $RETVAL -eq 0 ] && touch /var/lock/subsys/supervisord
        return $RETVAL
}

stop() {
        echo -n "Shutting down supervisord: "
        echo
        killproc -p $PIDFILE supervisord
        echo
        rm -f /var/lock/subsys/supervisord
        return 0
}

case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    status)
        status supervisord
        ;;
    restart)
        stop
        start
        ;;
    *)
        echo "Usage:  {start|stop|status|restart}"
        exit 1
        ;;
esac
exit $?

然后执行/etc/init.d/supervisord start命令就可以启动了。

step4:实战之管理promethues进程

prometheus是一个监控工具,官方说启动方法是这样子的:./prometheus --config.file=prometheus.yml 显然在生产环境中我们应该使用sysV脚本或使用supervisor来管理它。

mkdir -p /etc/supervisor/conf.d/
cd /etc/supervisor/conf.d/
touch prometheus.conf

prometheus.conf的内容为:

[program:prometheus]
command=/data/prometheus/prometheus --config.file=/data/prometheus/prometheus.yml
directory=/data/prometheus
user=root
numprocs=1
numprocs_start=1
process_name=%(program_name)s
autostart=true
autorestart=true
exitcodes=0
startretries=10
stopsignal=TERM
stopasgroup=true
killasgroup=true
stopwaitsecs=10
redirect_stderr=false
stdout_logfile=/data/logs/supervisor/%(program_name)s.log
stdout_logfile_maxbytes=100MB
stdout_logfile_backups=50
stderr_logfile=/data/logs/supervisor/%(program_name)s_error.log
stderr_logfile_maxbytes=100MB

然后重新加载配置文件:

supervisorctl reread
supervisorctl reload

然后看一下prometheus的运行状态:

supervisorctl status
prometheus                       RUNNING   pid 12807, uptime 0:01:30

先写到这里,不定时更新。