主管-监视Linux服务器和进程
有些用户只需要控制进程状态,就不需要或者不需要完全的Shell访问运行进程的计算机。
他们通常不需要知道侦听“低” TCP端口的进程,并且通常需要以root用户身份启动和重新启动。
有些流程通常需要成组地启动和停止,有时涉及优先级顺序。
工具名称管理器可帮助用户管理服务器上的进程并监视每个进程或者一组进程。
什么是supervisor?
Supervisor是一个客户端/服务器系统,允许其用户控制Linux和类似UNIX的操作系统上的许多进程。
可以将流程分为“流程组”,并且可以将一组逻辑上相关的流程作为一个单元停止和启动。
它通过fork/exec启动子进程,并且子进程不守护。
进程终止时,操作系统会立即向Supervisor发送信号。
主管基于四个组成部分:
- 监督者:这是服务器,负责自行调用启动子程序,响应来自客户端的命令,重新启动崩溃或者退出的子进程。
- supervisorctl:这是命令行客户端,它为supervisor提供的功能提供了类似shell的界面。用户可以连接到不同的受监管流程,获取受其控制的子流程的状态,停止和启动其子流程,并获取受监管人的正在运行的流程的列表。
- Web服务器:这是一个(稀疏的)Web用户界面,其功能可与supervisorctl相媲美,如果我们通过Internet套接字启动supervisor,则可以通过浏览器访问
- 一个XML-RPC接口:服务于Web UI的同一HTTP服务器提供了一个XML-RPC接口,该接口可用于询问和控制管理程序及其运行的程序
管理程序工具允许我们为进程分配优先级,并允许用户通过管理程序客户端发出命令,例如“全部启动”和“全部重新启动”,这将按预先指定的优先级顺序启动它们。
它完全用Python编写,实际使用的版本是3.2.1.
主管不适用于Python 3
1)安装主管
Supervisor提供了安装的可能性,但我将通过分发软件包向我们展示安装。
在centos 7上
# yum install epel-release -y && yum update
# yum install supervisor Loaded plugins: fastestmirror Loading mirror speeds from cached hostfile * base: mirrors.linode.com * epel: fedora-epel.mirrors.tds.net * extras: mirrors.linode.com * updates: mirrors.linode.com Resolving Dependencies --> Running transaction check ---> Package supervisor.noarch 0:3.1.4-1.el7 will be installed --> Processing Dependency: python-meld3 >= 0.6.5 for package: supervisor-3.1.4-1.el7.noarch --> Processing Dependency: python-setuptools for package: supervisor-3.1.4-1.el7.noarch
在Ubuntu 16.04上
# apt update && apt upgrade
# apt install supervisor Reading package lists... Done Building dependency tree Reading state information... Done The following additional packages will be installed: python-meld3 python-pkg-resources Suggested packages: python-setuptools supervisor-doc The following NEW packages will be installed: python-meld3 python-pkg-resources supervisor 0 upgraded, 3 newly installed, 0 to remove and 0 not upgraded. Need to get 392 kB of archives.
2)从监视工具主管开始
超级用户配置文件是/etc/supervisord.conf。
它用于supervisor和supervisorctl命令。
a)配置主管Web服务器
主管配置文件包含两个名为“ [unix_http_server]”和“ [inet_http_server]”的部分,在这些部分下,我们具有侦听UNIX域的HTTP服务器的配置参数,应插入TCP(互联网)套接字。
部分应如下所示
# vim /etc/supervisor.conf [unix_http_server] file=/var/run/supervisor/supervisor.sock ; (the path to the socket file) ;chmod=0700 ; sockef file mode (default 0700) ;chown=nobody:nogroup ; socket file uid:gid owner ;username=user ; (default is no username (open server)) ;password=123 ; (default is no password (open server)) [inet_http_server] ; inet (TCP) server disabled by default port=server-ip-address: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))
b)添加要监视的程序
在主管执行任何操作之前,我们需要至少在其配置中添加一个程序部分,以便我们能够监视程序本身。
程序部分将定义一个在调用超级用户命令时运行和管理的程序。
因此,要添加程序,我们将编辑配置文件并添加到末尾,例如,以下命令:
# vim /etc/supervisord.conf [program:cat-command] command=/bin/cat ; the program (relative uses PATH, can take args) process_name=%(program_name)s ; process_name expr (default %(program_name)s) numprocs=1 ; number of processes copies to start (def 1) [program:apache2] command=/usr/sbin/httpd -c "ErrorLog /dev/stdout" -DFOREGROUND redirect_stderr=true
c)开始监督
要开始监督,我们将运行“ supervisord”命令。
第一次,我们可以使用'-n'选项在前台启动它,这对于调试启动问题很有用,并且可以使用'-c'标志指示配置文件的完整路径。
生成的进程将自身守护进程并与终端分离。
默认情况下,它将操作日志保存在“ /var/log/supervisor/supervisord.log”中。
如果我们不使用'-c',则超级用户将首先在当前文件夹中搜索配置
# supervisord -c /etc/supervisord.conf
现在我们可以检查主管日志文件
# tail -f /var/log/supervisor/supervisord.log 2016-09-07 08:30:53,725 INFO daemonizing the supervisord process 2016-09-07 08:30:53,726 INFO supervisord started with pid 789 2016-09-07 08:30:54,729 INFO spawned: 'cat-command' with pid 790 2016-09-07 08:30:54,731 INFO spawned: 'apache2' with pid 791 2016-09-07 08:30:55,805 INFO success: cat-command entered RUNNING state, process has stayed up for > than 1 seconds (startsecs) 2016-09-07 08:30:55,807 INFO spawned: 'apache2' with pid 794
我们可以看到它开始了。
如果我们使用“ -n”选项,那么主管将在前台启动,并且我们需要在后台发送它以控制终端
3)与主管一起监控流程
我们可以使用Web界面与主管一起管理流程,也可以使用'supervisorctl'命令行。
我们已经配置了两个流程,但是一个流程运行不正常,因此我们将看到主管将如何检查我们的流程
a)使用supervisorctl监视过程
supervisorctl使用一些基本命令来管理进程:停止,启动,状态,重新启动,重新加载,尾部等。
要管理进程,请使用supervisorctl命令
# supervisorctl status apache2 FATAL Exited too quickly (process log Jan have details) cat-command RUNNING pid 790, uptime 0:02:52
我们会看到cat命令运行良好,但是apache命令却没有运行,我们得到了回报。
我们可以使用以下命令重新启动该过程
# supervisorctl restart all cat-command: stopped cat-command: started apache2: ERROR (abnormal termination)
b)通过Web界面监控过程
“ [inet_http_server]”部分是用于访问Web界面的部分。
请记住,它包含的内容应如下所示,但是我们可以使用其他用户名和密码
[inet_http_server] ; inet (TCP) server disabled by default port=server-ip-address: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))
现在,我们可以打开Web浏览器,并使用以下端口输入服务器IP地址:
我们可以看到可以重新启动,停止或者查看日志。