简介

官网 http://supervisord.org/

supervisor是一个允许用户监视和控制在linux操作系统的进程数量的客户端/服务器系统。由python语言编写,用以监控服务器的运行,发现问题能立即自动预警及自动重启等功能。supervisor还要求管理的程序是非daemon程序,supervisord会帮你把它转成daemon程序。

组件

supervisord

服务端,他负责在他自己的进程下起一个子进程,相应来自客户端的命令,重启崩溃或异常退出的子进程,输出相关日志,针对于子进程活跃期间的时间进行生成和管理

配置文件位置: /etc/supervisord.conf 注意配置合理权限

supervisorctl

命令行客户端,有supervisord提供的一个shell-like接口,通过它,用户可以连接到不同的supervisorctl进程,查看,起停子进程,列出正在运行的子进程。通过TCP进行交互,提供认证,在[supervisorctl]段进行统一的配置

web server

supervisorctl的web管理界面,通过访问http://localhost:9001/来管理子进程状态,[inet_http_server]这段进行配置

安装

前提条件是要有python环境,linux一般自带python环境,这里以centOS为例。

yum安装

yum install -y supervisor

启动

systemctl start supervisor

配置文件解析

生成配置文件:

echo_supervisord_conf > /tmp/supervisord.conf

一般yum安装后配置文件默认位置是/etc/supervisor/supervisord.conf。其中注释是以分号开头

[unix_http_server] #这段是通过socket文件启动的web server,这个要有,因为命令行supervisorctl是通过这个实现的。

file = /tmp/supervisor.sock

chmod = 0777

chown= nobody:nogroup

username = user

password = 123

[inet_http_server] #通过网络端口启动的web server

port = 127.0.0.1:9001

username = user

password = 123

[supervisord] #这块是服务配置

logfile = /tmp/supervisord.log 日志文件

logfile_maxbytes = 50MB 日志文件最大size

logfile_backups=10 日志轮询下备份数

loglevel = info 日志级别

pidfile = /tmp/supervisord.pid pid文件位置

nodaemon = false 如果是true,supervisor将在前端启动

minfds = 1024 supervisord启动成功的最小文件描述符数

minprocs = 200 supervisord启动成功的最小进程描述符数

umask = 022

user = chrism 启动用户,这块要注意,这个用户要有相应的目录权限

identifier = supervisor supervisor进程的 identifier字符串,用户RPC协议接口

directory = /tmp 当supervisord服务daemonizes时,切换到这个目录,可用这个%(here)s变量来扩展到整个配置文件

nocleanup = true 禁止supervisord在启动时间清空任何存在的AUTO子日志文件

childlogdir = /tmp AUTO自日志文件目录

strip_ansi = false 除去在子日志文件中所有的 ANSI转义序列

environment = KEY1="value1",KEY2="value2" 一个键/值的列表,一个环境变量吧?

[supervisorctl]

serverurl = unix:///tmp/supervisor.sock

username = chris

password = 123

prompt = mysupervisor String used as supervisorctl prompt.作为supervisorctl提示字符串。

管理进程配置

配置文件位置:/etc/supervisor/conf.d/

一般有如下配置项:

process_name=%(program_name)s #进程名称,默认是程序名称

command 启动程序命令

numprocs=1 #进程数量

directory=/tmp #路径

umask=022 #掩码

priority=999 #优先级,越大被开起的越早

autorestart=true #自动重启

startsecs=10 #启动等待时间(秒)

startretries=3 #启动重试次数

stopsignal=TERM #关闭信号

stopwaitsecs=10 #关闭前等待时间

user=chrism #监控用户权限

redirect_stderr=false #重定向报错输出

stdout_logfile=/a/path #输入重定向为日志

stdout_logfile_maxbytes=1MB #日志大小

stdout_logfile_backups=10 #日志备份

stdout_capture_maxbytes=1MB

stderr_logfile=/a/path

stderr_logfile_maxbytes=1MB

stderr_logfile_backups=10

stderr_capture_maxbytes=1MB

environment=A=1,B=2 #预定义环境变量

serverurl=AUTO #系统URL

示例

为了更好的展示,我这边写了一个简单的服务。下面的具体的代码:

#!/usr/bin/env python

import socket

HOST, PORT = '', 8080

listen_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

listen_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

listen_socket.bind((HOST, PORT))

listen_socket.listen(1)

while True:

client_connection, client_address = listen_socket.accept()

request = client_connection.recv(1024)

http_response = """\

HTTP/1.1 200 OK

Hello World!

"""

client_connection.sendall(http_response)

client_connection.close()

这个脚本是一个简单的web服务器,8080端口,所有访问都会返回 Hello World!

下面我们看下配置文件/etc/supervisor/conf.d/webserver.conf

[program:webserver]

autostart=true

startretries=3

command=/opt/webserver.py

查看状态

root@0c1fc23d1398:~# supervisorctl status

webserver RUNNING pid 1120, uptime 0:08:07

supervisorctl命令

1.交互模式

直接输入supervisorctl就进入交互模式。

root@0c1fc23d1398:~# supervisorctl

webserver RUNNING pid 1120, uptime 0:09:40

supervisor>

2.命令行模式

如上节所说的supervisorctl status

3.具体命令项

交互和命令行模式有一样。

reread 重新加载配置文件

update 将配置文件里新增的子进程加入进程组,如果设置了autostart=true则会启动新新增的子进程

status 查看所有进程状态

status 查看指定进程状态

start all 启动所有子进程

start 启动指定子进程

restart all 重启所有子进程

restart 重启指定子进程

stop all 停止所有子进程

stop 停止指定子进程

reload 重启supervisord

add 添加子进程到进程组

reomve 从进程组移除子进程,需要先stop。注意:移除后,需要使用reread和update才能重新运行该进程

web server界面

还记得“配置文件解析”一节关于web server段的配置吗?不记得可以回去看一眼。我们稍微展示下web界面。浏览器输入http://:,会弹出输入用户名和密码的弹窗,输入信息后可以看到界面了。

web界面

从界面中可以看到,服务的状态,进程id和运行的时间。还有一些简单的操作,例如重启,停止,清除日志,监控日志等。

常见的错误

1.多进程启动

报错信息如下:

Starting supervisor: Error: %(process_num) must be present within process_name when numprocs > 1 in section 'program:nginx' (file: '/etc/supervisor/conf.d/nginx.conf')

For help, use /usr/bin/supervisord -h

这是配置文件格式不对,下面是格式简介

当numprocs=1时,process_name=%(program_name)s

当numprocs>=2时,%(program_name)s_%(process_num)

类似下面的配置

[program:sleeptime]

autostart=true

startretries=3

command=/opt/sleeptime.py

#主要是下面的2行

process_name=%(program_name)s%(process_num)s

numprocs=4

这个时候查看进程状态,会发现有4个进程出现

root@0c1fc23d1398:/etc/supervisor/conf.d# supervisorctl status

sleeptime:sleeptime0 RUNNING pid 1139, uptime 0:00:04

sleeptime:sleeptime1 RUNNING pid 1140, uptime 0:00:04

sleeptime:sleeptime2 RUNNING pid 1141, uptime 0:00:04

sleeptime:sleeptime3 RUNNING pid 1142, uptime 0:00:03

webserver RUNNING pid 1120, uptime 0:30:00

2.直接运行 supervisorctl status 报:

Error: Server requires authentication

For help, use /usr/local/bin/supervisorctl -h

因为你设置访问账号密码,所以只能先supervisorctl进去,在status。

主要还是看日志信息,和程序本身的日志。

linux启动supervisord服务,supervisord进程管理服务相关推荐

  1. 《Linux基础》06. 进程管理 · 服务管理

    Linux基础-06 1:进程管理 1.1:查看进程 1.1.1:ps 1.1.2:pstree 1.1.3:top 1.2:终止进程 1.2.1:kill 1.2.2:killall 2:服务管理 ...

  2. Linux启动tomcat命令行关闭后服务会停止

    最近因为项目需要迁移到云服务器上.自己一个开发还要兼顾运维的事情真是太难了.由于不熟悉.遇到一些各种各样的小坑.在此记录一下. 问题:Linux启动tomcat命令行关闭后服务会停止? 一般Linux ...

  3. linux基础知识_压缩—进程管理-网络管理-ftp-nfs-ssh-scp

    linux基础知识_压缩-进程管理-网络管理-ftp-nfs-ssh-scp 1.压缩包管理 gzip .gz格式的压缩包,不打包,分别压缩,原文件消失 bzip2 .bz2格式的压缩包,原文件不会消 ...

  4. linux服务与进程管理sup,linux下进程管理工具-supervisord

    一 简介 supervisord是linux下的一个优秀的进程管理工具,通过supervisord可以方便管理和应用linux系统下服务进程过多的问题,其支持服务异常退出自动重启,通过浏览器管理控制相 ...

  5. Linux学习:第六章-Linux服务和进程管理

    一进程查看 1psaux查看当前系统所有运行的进程 -a显示前台所有进程 -u显示用户名 -x显示后台进程 user: 用户名 pid:进程id.PID1init系统启动的第一个进程 %CPUcpu占 ...

  6. Linux启动nacos成功日志_微服务系列之Nacos配置中心

    Nacos 介绍 Nacos 是 Alibaba 公司推出的开源工具,用于实现分布式系统的服务发现与配置管理.英文全称 Dynamic Naming and Configuration Service ...

  7. 查看cananl是否启动_Linux基础之进程管理

    -o : 进程起始的ID: -n  : 进程终止的ID: pgrep -lo httpd 31435 httpd 4. pstree:以进程树的方式来显示进程间连接 选顷不参数: -A : 各进程树之 ...

  8. Linux学习(十一)---进程管理

    文章目录 一.进程的基本介绍 二.显示系统执行的进程 2.1 说明 2.2 ps 指令详解 2.3 应用实例 2.4 思考题 三.终止进程 kill 和 killall 3.1 基本介绍 3.2 基本 ...

  9. 自实现进程管理器linux,【Linux工具篇】supervisor进程管理器

    概述 项目中遇到有些脚本需要通过后台进程运行,保证不被异常中断,除了通过nohup.&.screen以外,更推荐的方法就是用Supervisor. Supervisor是用Python开发的一 ...

  10. 11、Linux系统基础原理、进程管理工具、任务计划

    Linux进程及作业管理 ​ 内核的功用:进程管理.文件系统.网络功能.内存管理.驱动程序.安全功能 ​ Process: 运行中的程序的一个副本: ​ 存在生命周期 Linux内核存储进程信息的固定 ...

最新文章

  1. 专业软件测试,各类专业软件测试情况
  2. php 图片上传预览(转)
  3. 【二分】【SPFA】架设电话线(jzoj 2132)
  4. 用C#实现软件自动更新
  5. 百度php笔试题目,12/11/17 百度PHP笔试题目整理
  6. Base64 + 变为 空格 问题分析
  7. java学习--基础知识进阶第五天--API、 Object类 System类、日期相关类、包装类正则表达式...
  8. 微课|中学生可以这样学Python(例5.3):报数游戏
  9. Vivado入门创建工程之----流水灯
  10. 栈和递归---手动实现一个栈和蒜头君吃桃
  11. android 创建目录/文件/读写文件
  12. idea的debug基本用法快捷键
  13. 一些CFD名词缩写的含义(持续更新中)
  14. javascript 弹出层(警告框)的制作(css元素居中、javascript元素居中)
  15. 物联网 (IoT) 解决方案:万物互联
  16. html时钟自动刷新抖音,抖音上炫酷的网红文字时钟
  17. 三种非递归遍历二叉树的方法
  18. 京东E卡查询绑定助手电脑版APP
  19. 智和网管平台-真正开放源码的网元管理系统(EMS)
  20. Java递归解压zip压缩包

热门文章

  1. java applepay_ApplePay对接java后台详细代码
  2. Qmail加装自动杀毒(转)
  3. 自签名证书和私有CA签名的证书的区别
  4. 网易云课堂课程下载教程
  5. C# 原始的方法写入xml文件的代码
  6. 使用tayga测试无状态nat64功能
  7. 哈佛幸福课中提到的书_借助虚拟现实,在哈佛最大的班级中排在前列
  8. [详细]分享验证码接收平台工作原理
  9. HDMI接口是什么?HDMI接口的基础知识讲解
  10. Pr 与音频相关的调整方法