1.首先说说为什么要使用分组
需求:假如公司目前有一台配置很高的服务器用来部署项目,项目为了方便管理,使用supervisor进程管理工具,目前该服务器上面已经部署了一个项目。此时研发团队又开发了一个项目,需要部署上线,由于该服务器性能很好,老板想要节约成本,预将这个项目也部署在该服务器上,同样使用supervisor进行管理,那么此时就会出现一下情况:
-
如果仅有一个项目时,启动、停止、重启项目只需要使用以下命令
supervisorctl start all supervisorctl restart all supervisorctl stop all
-
现在有两个项目了,则不能在使用
all
进行操做了,否则启动或停止时,两个项目则同时被操做,此时就可以使用分组来进行管理,将两个项目分别加入不同的组进行管理项目1分组组名为
project1
,它下面有很多服务,比如uwsgi、celery、channels…,服务名暂且和与服务对应分别命名为:uwsgi、celery_worker、celery_beat、channels项目2分组组名为
project2
,它下面也有很多服务,比如uwsgi、celery、channels…,服务名暂且和与服务对应分别命名为:uwsgi、celery_worker、celery_beat- 现在需要停止项目1,但是不能影响项目2
supervisorctl stop project1:
这条命令会将项目1下的所有服务都停止(注意后面的冒号)
- 如果不使用分组的情况下(两个或多个项目的每个服务名称都不能重名,否则supervisor会出现异常),要停止一个项目且不影响另一个项目,必须使用以下命令
supervisorctl stop celery_worker uwsgi celery_beat ...
你必须手写所有要停止服务的名称,必须保证没有写错,如果写错一个就要重新来过,是不是很麻烦
- 当然有小伙伴需求是这样,使用了分组,但我想启动单个服务,是不是分组后每次只能重启该分组下的所有服务,当然不是,使用了分组后重启组内单个服务时可以使用以下命令,假如重启项目1下的channels服务
supervisorctl restart project1:channels
- 现在需要停止项目1,但是不能影响项目2
2.说了分组的优点,接下来说说怎么对supervisor
进行分组
-
supervisor
配置文件路径/etc/supervisord.d/
下,关于supervisor
基础知识,在之前的文章中已经讲过,此处不再赘述,将会使得该篇文章更加易读。 -
如果不使用分组时我们项目的多个服务的配置文件可能如下,每个服务单独写一个配置文件
-
也可能是所有服务写在一个配置文件
-
分组的使用,为了方便,我们将单个项目的所有服务写在一个文件中
-
分组应该也可以写在单个配置文件中,假如项目下每个服务都有自己的配置文件,如第二条截图,给每个服务首行都添加一个组
[group:组名]
,这块的组名都写成一致,此时应该也会被分配到一个组,此处没尝试,只是猜测,理论上应该没问题,你们有兴趣可以验证以下,到时候可以留言告知