supervisor进程守护

3 min

1、安装与启动

  • yum 安装
yum install supervisor
  • easy_install 安装
wget --no-check-certificate https://bootstrap.pypa.io/ez_setup.py -O - | sudo python

easy_install supervisor
  • 配置supervisor

在etc下创建目录,并赋权限

mkdir -m 700 -p /etc/supervisor

在目录” /etc/supervisor”下创建配置文件

echo_supervisord_conf > /etc/supervisor/supervisord.conf

修改配置文件

vi /etc/supervisor/supervisord.conf

在文件末尾添加,注意首尾需无空格,需顶格

[include]
files = /root/supervisorConf/*.conf

在目录”/etc/supervisor”下创建dotnet core 进程配置文件存放目录”conf.d”

mkdir -m 700 /root/supervisorConf

如果需要在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))

修改代码,删除前面的分号,port改为*

[inet_http_server]         ; inet (TCP) server disabled by default
port=*:9001        ; ip_address:port specifier, *:port for all ifa
username=user              ; default is no username (open server)
password=123               ; default is no password (open server)

  • 配置supervisor自动启动

centos6

设定supervisor启动文件

vi /etc/init.d/supervisord

粘贴以下内容

#! /usr/bin/env bash
# chkconfig: - 85 15

PATH=/sbin:/bin:/usr/sbin:/usr/bin

PROGNAME=supervisord

DAEMON=/usr/bin/$PROGNAME

CONFIG=/etc/supervisor/$PROGNAME.conf

PIDFILE=/tmp/$PROGNAME.pid

DESC="supervisord daemon"

SCRIPTNAME=/etc/init.d/$PROGNAME

# Gracefully exit if the package has been removed.

test -x $DAEMON || exit 0


start()

{

echo -n "Starting $DESC: $PROGNAME"

$DAEMON -c $CONFIG

echo ".............start success"

}

stop()

{

echo "Stopping $DESC: $PROGNAME"

if [ -f "$PIDFILE" ];
then
supervisor_pid=$(cat $PIDFILE)
kill -15 $supervisor_pid
echo "......"
echo "stop success"
else
echo "$DESC: $PROGNAME is not Runing"
echo ".........................stop sucess"
fi
}

status()

{ statusport=`netstat -lntp|grep 9001|awk -F ' ' '{print $4}'|awk -F ':' '{print $2}'`

if [ -f "$PIDFILE" ];
then
supervisor_pid=$(cat $PIDFILE)
echo "$DESC: $PROGNAME is Runing pid=$supervisor_pid"
else
echo "$DESC: $PROGNAME is not Runing"
echo "please use command /etc/init.d/supervisord start Run the service"
fi
}

case "$1" in

start)

start

;;

stop)

stop

;;

restart)

stop

start

;;

status)

status

;;

*)

echo "Usage: $SCRIPTNAME {start|stop|restart}" >&2

exit 1

;;

esac

exit 0

添加自启动服务

chkconfig supervisord  on

启动服务

service supervisord start

停止服务

service supervisord stop

centos7

创建supervisor 自启动服务

vi /etc/systemd/system/supervisor.service

编辑内容:

[Unit]
Description=supervisor

[Service]
Type=forking
ExecStart=/usr/bin/supervisord -c /etc/supervisor/supervisord.conf
ExecStop=/usr/bin/supervisorctl shutdown
ExecReload=/usr/bin/supervisorctl reload
KillMode=process
Restart=on-failure
RestartSec=42s

[Install]
WantedBy=multi-user.target

使配置生效

systemctl daemon-reload

设置服务开机启动,即设置enable

systemctl enable supervisor.service

启动服务

systemctl start supervisor.service

2、参考配置

  • /etc/supervisor/supervisord.conf

    在文件最后添加

[include]
files = /root/supervisorConf/*.conf
  • /etc/supervisor/mongo.conf
[program:mongo]
command=/home/mongodb/mongodb-linux/bin/mongod --dbpath /home/mongodb/mongodb-linux/data
stderr_logfile=/var/log/mongo.error.log
stdout_logfile=/var/log/mongo.stdout.log
environment=ASPNETCORE_ENVIRONMENT=Production
user=root
stopsignal=INT
autostart=true
autorestart=true
redirect_stderr=true
startsecs=3
  • /etc/supervisor/mysql.conf
[program:mysql]
command=/usr/local/mysql/bin/mysqld_safe --defaults-file=/mysql/3306/my.cnf
stderr_logfile=/var/log/mongo.error.log
stdout_logfile=/var/log/mongo.stdout.log
environment=ASPNETCORE_ENVIRONMENT=Production
user=root
stopsignal=INT
autostart=true
autorestart=true
redirect_stderr=true
startsecs=3

supervisor 监控的进程必须以非daemon 方式运行

如Nginx要用supervisor 管理需要在配置文件增加一行

  • /opt/nginx/conf/nginx.conf
daemon off;
  • /etc/supervisor/nginx.conf
[program:nginx]
command=/usr/local/nginx/sbin/nginx
directory=/usr/local/nginx
stderr_logfile=/var/log/nginx.error.log
stdout_logfile=/var/log/nginx.stdout.log
environment=ASPNETCORE_ENVIRONMENT=Production
user=root
stopsignal=INT
autostart=true
autorestart=true
redirect_stderr=true
startsecs=3
  • /etc/supervisor/redis.conf
[program:redis]
command=/usr/local/bin/redis-server /opt/redis/redis.conf
stderr_logfile=/var/log/Redis.error.log
stdout_logfile=/var/log/Redis.stdout.log
environment=ASPNETCORE_ENVIRONMENT=Production
user=root
stopsignal=INT
autostart=true
autorestart=true
redirect_stderr=true
startsecs=3

3、其他

更新新的配置到supervisord:

supervisorctl update

更新新的配置到supervisord

supervisorctl update

重新启动配置中的所有程序

supervisorctl reload

启动某个进程(program_name=你配置中写的程序名称)

supervisorctl start program_name

查看正在守候的进程

supervisorctl

停止某一进程 (program_name=你配置中写的程序名称)

pervisorctl stop program_name

重启某一进程 (program_name=你配置中写的程序名称)

supervisorctl restart program_name

停止全部进程

supervisorctl stop all