前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Mac环境下使用supervisor

Mac环境下使用supervisor

作者头像
xiangzhihong
发布2022-11-30 15:05:47
7850
发布2022-11-30 15:05:47
举报
文章被收录于专栏:向治洪向治洪

supervisor

Superviosr是一个UNIX-like系统上的进程监控工具,是一个Python开发的client/server系统,可以管理和监控unix上面的进程。同daemontools一样,它也不能监控daemon进程。

官网地址为:http://supervisord.org/

supervisor特点

1,部署简单

为啥简单呢?因为咱们通常管理linux进程的时候,一般来说都需要自己编写一个能够实现进程start/stop/restart/reload功能的脚本,然后丢到/etc/init.d/下面。这么做有很多不好的地方,第一我们要编写这个脚本,这就很耗时耗力了。第二,当这个进程挂掉的时候,linux不会自动重启它的,想要自动重启的话,我们还要自己写一个监控重启脚本,而supervisor则可以完美的解决这些问题。

那supervisor是如何实现进程管理并重启的呢?其实supervisor管理进程,就是通过fork/exec的方式把这些被管理的进程,当作supervisor的子进程来启动。这样的话,我们只要在supervisor的配置文件中,把要管理的进程的可执行文件的路径写进去就OK了,这样就省下了自己写控制脚本带来的麻烦。第二,被管理进程作为supervisor的子进程,当子进程挂掉的时候,父进程可以准确获取子进程挂掉的信息的,所以当然也就可以对挂掉的子进程进行自动重启操作,当然重启还是不重启,还要看你的配置文件里面有木有设置autostart=true。

supervisor管理的进程、进程组信息,全部都写在一个ini格式的文件里。而且,我们管理supervisor的时候的可以在本地进行管理,也可以远程管理,而且supervisor提供了一个web界面,我们可以在web界面上监控、管理进程。 当然,本地、远程和web管理的时候,需要调用supervisor的xml_rpc接口。

2,精准

使用supervisor监控子进程,得到的子进程状态无疑是准确的。

3,进程组

supervisor可以对进程组统一管理,也就是说咱们可以把需要管理的进程写到一个组里面,然后我们把这个组作为一个对象进行管理,如启动、停止、重启等等操作。而linux系统则是没有这种功能的,我们想要停止一个进程,只能一个一个的去停止,要么就自己写个脚本去批量停止。

大伙都知道linux的进程,特别是侦听在1024端口之下的进程,一般用户大多数情况下,是不能对其进行控制的。想要控制的话,必须要有root权限。而supervisor提供了一个功能,可以为supervisord或者每个子进程,设置一个非root的user,这个user就可以管理它对应的进程了。

supervisor结构

supervisor主要由Supervisord、Supervisorctl、Web server和XML-RPC interface组成。

  • Supervisord:主进程,负责管理进程的server,它会根据配置文件创建指定数量的应用程序的子进程,管理子进程的整个生命周期,对crash的进程重启,对进程变化发送事件通知等。同时通过内置web server和XML-RPC Interface可以轻松实现进程管理。
  • Supervisorctl:管理client,用户通过命令行发送消息给supervisord,可以查看进程状态,加载配置文件,启停进程,查看进程标准输出和错误输出,远程操作等。
  • Web server:superviosr提供了web server功能,可通过web控制进程。
  • XML-RPC interface: XML-RPC接口,提供XML-RPC服务来对子进程进行管理和监控。

安装部署

为了统一python版本和各种依赖库,推荐使用pyrun代替系统的python进行部署,同时需要在pyrun安装pip,将安装包下载至pkg目录,执行如下命令:

代码语言:javascript
复制
/data/pyrun/bin/pip install --no-index -f pkg meld3==1.0.0

/data/pyrun/bin/pip install --no-index -f pkg elementtree==1.2.6-20050316

/data/pyrun/bin/pip install --no-index -f pkg supervisor==3.2.0

如果机器无法联网,也可以源码安装,安装的步骤如下:

  1. 依赖 python,可将python版本升级;
  2. 需要第三方包 meld3、setuptools、ElementTree;
代码语言:javascript
复制
setuptools (latest) from http://pypi.python.org/pypi/setuptools.
    
meld3 (latest) from http://www.plope.com/software/meld3/.
    
elementtree (latest) from http://effbot.org/downloads#elementtree.
  1. root解压相关包,批量安装。

安装

Windows和Mac下都可以使用包管理工具npm进行安装,打开终端/命令行工具,输入以下代码并执行:

代码语言:javascript
复制
npm install supervisor -g    //windows
sudo npm install supervisor -g    //mac

说明:Mac最好加上sudo授予管理员权限进行安装,避免有的文件因权限问题下载失败导致模块无法使用。

在这里插入图片描述
在这里插入图片描述

使用

使用supervisor主要会涉及到以下几个命令:

代码语言:javascript
复制
# 启动supervisor

python /usr/bin/supervisord

# 启动监控的进程

supervisorctl start all

# 关闭监控的进程

supervisorctl stop all

# 查看状态

supervisorctl status

# 重新加载配置文件:

supervisorctl reload

具体来说,进入Node项目根目录,执行命令supervisor yourNodeEntrance(.js)即可启动监听。例如:

在这里插入图片描述
在这里插入图片描述

除此之外,supervisor 3.0版本还引入了事件,利用这个特性我们实现实时监控进程状态并告警。

首先了解一下supervisor提供的事件,supervisor通过子进程对应用程序进行管理,监控程序同样作为一个子进程运行,子进程的stdin、stdout、stderr都已经被重定向。事件处理过程如下:

  • 作为监听程序的子进程向stdout写入READY\n;
  • 事件发生时,supervisor会选择一个处于Ready状态的子进程的stdin写入事件内容;
  • 该子进程事件处理完毕后向stdout写入OK\n或FAIL\n,反馈处理结果;
  • 重复上述操作

supervisor提供的多种事件类型,包括:进程状态事件、supervisor状态事件、定时事件、xmlrpc调用事件、进程日志事件等等。我们主要关注进程状态相关事件。supervisor对进程定义了如下状态,每个状态的切换都会触发相应的事件。

在这里插入图片描述
在这里插入图片描述

开启 web 管理

代码语言:javascript
复制
vi /usr/local/etc/supervisord.ini

# 将下面注释去掉

[inet_http_server] ; inet (TCP) server disabled by default

port=127.0.0.1:9001 ; (ip_address:port specifier, *:port for all iface)

username=fengjx ; (default is no username (open server))

password=fengjx1989 ; (default is no password (open server))

# 重启服务

$ brew services start supervisor

==> Tapping homebrew/services

Cloning into '/usr/local/Homebrew/Library/Taps/homebrew/homebrew-services'...

remote: Counting objects: 10, done.

remote: Compressing objects: 100% (7/7), done.

remote: Total 10 (delta 0), reused 6 (delta 0), pack-reused 0

Unpacking objects: 100% (10/10), done.

Tapped 0 formulae (37 files, 51KB)

==> Successfully started `supervisor` (label: homebrew.mxcl.supervisor)
在这里插入图片描述
在这里插入图片描述

进程管理

supervisord.ini 的最后一行配置:

代码语言:javascript
复制
files = /usr/local/etc/supervisor.d/*.ini

我们可以吧配置文件写到 /usr/local/etc/supervisor.d/ 目录下,只要以.ini 后缀结尾就行,例如管理nginx的状态:

代码语言:javascript
复制
vi nginx.ini

[program:nginx]

command = sudo /usr/local/bin/nginx

stdout_logfile=/data/home/supervisor/logs/nginx_stdout.log

stdout_logfile_maxbytes=10MB

stderr_logfile=/data/home/supervisor/logs/nginx_stderr.log

stderr_logfile_maxbytes=10MB

autostart=true

autorestart=true

;environment = PATH="$PATH:/usr/local/bin"

然后,使用 supervisorctl 启动 nginx。

代码语言:javascript
复制
supervisorctl start nginx

参考: github上2个基于supervisor二次开发的集中进程管理工具,可在一个页面下管理多台机器的进程: https://github.com/mlazarov/supervisord-monitor https://github.com/TAKEALOT/nodervisor

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-01-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • supervisor
    • supervisor特点
      • 1,部署简单
      • 2,精准
      • 3,进程组
    • supervisor结构
      • 安装部署
      • 安装
      • 使用
        • 开启 web 管理
          • 进程管理
          相关产品与服务
          命令行工具
          腾讯云命令行工具 TCCLI 是管理腾讯云资源的统一工具。使用腾讯云命令行工具,您可以快速调用腾讯云 API 来管理您的腾讯云资源。此外,您还可以基于腾讯云的命令行工具来做自动化和脚本处理,以更多样的方式进行组合和重用。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档