Supervisor服务管理熟悉
需求背景
- 最近恰逢自己服务器到期了,使用腾讯云的镜像功能在安装新系统时使用旧系统的镜像安装完成
- 这时到新服务器会发现,基本所有服务都停止了,需要自己手动各类服务如redis、nginx、docker等
- 包括服务器关机再开机时,所有服务也是停止状态
- 当然这里可以将各类服务加入到system启动项里面(后续再探索)
一阶段
第一阶段解决办法:编写一个总shell脚本,在服务器开机时,手动执行这个脚本去检测各类服务是否正常
如果是停止的,则去启动服务
如果在运行中,则提示服务已经运行
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25#!/bin/bash
# 关机或重启后,执行本脚本启动各类服务
# docker
docker_sum=`ps -ef | grep docker | grep -v grep | awk '{print $2}' | wc -l`
# nginx
nginx_sum=`ps -ef | grep nginx | grep -v grep | awk '{print $2}' | wc -l`
# 测试平台demo
java_sum=`ps -ef | grep java | grep -v grep | awk '{print $2}' | wc -l`
# redis
redis_sum=`ps -ef | grep redis | grep -v grep | awk '{print $2}' | wc -l`
if [ $nginx_sum -ne 0 ]
then
echo "---------nginx is already running---------"
else
cd /usr/local/nginx/
./sbin/nginx -c ./conf/nginx.conf
nginx_sum=`ps -ef | grep nginx | grep -v grep | awk '{print $2}' | wc -l`
if [ $nginx_sum -ne 0 ]
then
echo "-------nginx is start---------"
else
echo "------nginx start failed-------"
fi
fi执行效果如下
二阶段
- 受到现有开发在服务器上重启服务和想起第一家公司带我的大佬影响用的命令
- 想起了supervisor这个命令,于是就百度搜索了一番,最终成功,下面是此次过程记录
安装过程
安装Supervisor有多种方式
- easy_install安装supervisor
- pip安装supervisor
- yum epel-release安装supervisor
前面两种都需要python环境最好大于2.6,这里我选择的是第三种方式
1 |
|
安装好后可以查看三个可以执行的程序
1
2
3
4
5
6[root@VM-16-5-centos ~]# which supervisord
/usr/bin/supervisord
[root@VM-16-5-centos ~]# which supervisorctl
/usr/bin/supervisorctl
[root@VM-16-5-centos ~]# which echo_supervisord_conf
/usr/bin/echo_supervisord_conf
配置supervisor
修改配置文件
1
2
3
4
5
6#修改socket文件的mode,默认是0700
sed -i 's/;chmod=0700/chmod=0766/g' /etc/supervisord.conf
#在配置文件最后添加以下两行内容来包含/etc/supervisord目录
sed -i '$a [include] \
files = /etc/supervisord.d/*.conf' /etc/supervisord.conf启动supervisor服务
1
2
3systemctl start supervisor.service
# 或者
supervisord -c /etc/supervisord.conf查看服务状态(running即为正常)
1
systemctl status supervisor.service
加入开机自启动
开机启动时,自动带起supervisor服务
1
systemctl enable supervisor.service
编写管理服务文件
想要我们的应用服务被Supervisor管理,就需要在/etc/supervisord目录下编写配置文件
java应用中jar包启动例子
jar包案例如下
1 |
|
重新加载文件及启动
在新增了服务管理配置文件后,需要重启Supervisor服务或者保险一点,重新加载后,再重启
1 |
|
可以看到这个testPt服务已经启动,因为是java应用,所以我们也可以(java这个服务已经启动)
1
2
3[root@VM-16-5-centos supervisord.d]# ps -ef | grep java
root 10602 920 0 13:40 pts/0 00:00:00 grep --color=auto java
root 12022 9921 0 10月11 ? 00:05:20 java -jar /usr/cxl/my-project-backend-0.0.1-SNAPSHOT.jar
常用命令
supervisor常用的命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16# Supervisor 重新加载配置文件
supervisorctl reread
supervisorctl update
# 所有服务
supervisorctl status all # 查看所有服务的进程状态
supervisorctl stop all # 停止所有服务
supervisorctl start all # 启动所有服务
supervisorctl restart all # 重启所有服务
supervisorctl reload all # 重载所有服务
# 针对某一个服务的管理
supervisorctl status testPt # 查看该服务的进程状态
supervisorctl stop testPt # 停止该服务
supervisorctl start testPt # 启动该服务
supervisorctl restart testPt # 重启该服务
supervisorctl reload testPt # 重载该服务