supervisor常见报错问题处理及使用教程

news2024/9/21 10:39:44

Supervisor 是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。
官网介绍

Supervisor已经过测试,可以在Linux(Ubuntu 9.10),Mac OS X(10.4 / 10.5 / 10.6)和Solaris(10 for Intel)和FreeBSD 6.1上运行。它可能在大多数UNIX系统上都能正常工作。在任何版本的Windows下,Supervisor 都不会运行。Supervisor 可以使用Python 2.4或更高版本,但不能在任何版本的Python 3下使用。(主要原因是Ubuntu默认源安装的版本太低3.3.1,目前是4.2.4,j建议按照官网安装步骤如下:)

Supervisor can be installed with pip install:
Depending on the permissions of your system’s Python, you might need to be the root user to install Supervisor successfully using pip.

pip install supervisor

Internet-Installing Without Pip
If your system does not have pip installed, you will need to download the Supervisor distribution and install it by hand. Current and previous Supervisor releases may be downloaded from PyPi. After unpacking the software archive, run python setup.py install. This requires internet access. It will download and install all distributions depended upon by Supervisor and finally install Supervisor itself.

 python setup.py install

官方安装包下载链接

安装成功后可本地查看supervisor版本
supervisord -v
在这里插入图片描述启动方法一般有:
1.使用 pip或者 python setup.py install 安装的supervisor则直接命令行输入 supervisord便可运行。
supervisor 默认在以下路径查找配置文件:/usr/etc/supervisord.conf, /usr/supervisord.conf, supervisord.conf, etc/supervisord.conf, /etc/supervisord.conf, /etc/supervisor/supervisord.conf
查找supervisor可使用:

whereis supervisor

如需指定主配置文件,则需要使用-c参数:

$ supervisord -c /etc/supervisor/supervisord.conf

注:supervisord主进程supervisorctl是给守护进程发送命令的客户端工具

supervisorctl status
unix:///var/run/supervisor.sock no such file

2、使用 apt-get 安装的supervisor直接可以通过
$ /etc/init.d/supervisor start
运行。

配置文件
主配置文件名: supervisord.conf

可以通过运行echo_supervisord_conf获得。这个配置文件一般情况下不需要更改,除了最后的[include]部分,其余保持默认即可。

[unix_http_server]
file=/tmp/supervisor.sock   #UNIX socket 文件,supervisorctl 会使用
#chmod=0700                 #socket文件的mode,默认是0700
#chown=nobody:nogroup       #socket文件的owner,格式:uid:gid
 
 
 
#[inet_http_server]         #HTTP服务器,提供web管理界面
#port=127.0.0.1:9001        #Web管理后台运行的IP和端口,如果开放到公网,需要注意安全性
#username=user              #登录管理后台的用户名
#password=123               #登录管理后台的密码
 
[supervisord]
logfile=/tmp/supervisord.log #日志文件,默认是 $CWD/supervisord.log
logfile_maxbytes=50MB        #日志文件大小,超出会rotate,默认 50MB,如果设成0,表示不限制大小
logfile_backups=10           #日志文件保留备份数量默认10,设为0表示不备份
loglevel=info                #日志级别,默认info,其它: debug,warn,trace
pidfile=/tmp/supervisord.pid #pid 文件
nodaemon=false               #是否在前台启动,默认是false,即以 daemon 的方式启动
minfds=1024                  #可以打开的文件描述符的最小值,默认 1024。注意托管ES进程,这里要进行调整至65535
minprocs=200                 #可以打开的进程数的最小值,默认 200。注意托管ES进程,这里要进行调整至4096
[supervisorctl]
serverurl=unix:///tmp/supervisor.sock #通过UNIX socket连接supervisord,路径与unix_http_server部分的file一致
#serverurl=http://127.0.0.1:9001 # 通过HTTP的方式连接supervisord,想要web访问的话,可以取消注释
# [program:xx]是被管理的进程配置参数,xx是进程的名称
[program:xx]
command=XXX.sh run  # 程序启动命令
autostart=true       # 在supervisord启动的时候也自动启动
startsecs=10         # 启动10秒后没有异常退出,就表示进程正常启动了,默认为1秒
autorestart=true     # 程序退出后自动重启,可选值:[unexpected,true,false],默认为unexpected,表示进程意外杀死后才重启
startretries=3       # 启动失败自动重试次数,默认是3
#user=root          # 用哪个用户启动进程,默认是root,
priority=999         # 进程启动优先级,默认999,值小的优先启动
redirect_stderr=true # 把stderr重定向到stdout,默认false
stdout_logfile_maxbytes=20MB  # stdout 日志文件大小,默认50MB
stdout_logfile_backups = 20   # stdout 日志文件备份数,默认是10 
# stdout 日志文件,需要注意当 **指定目录不存在时无法正常启动** ,所以需要手动创建目录(supervisord 会自动创建日志文件),可以修改日志路径为本地的文件夹
 
stdout_logfile=/opt/std.out
stopasgroup=false     #默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程
killasgroup=false     #默认为false,向进程组发送kill信号,包括子进程

#包含其它配置文件
 
[include]
files = supervisord.d/*.conf    #默认放在安装目录的supervisord.d目录下,可以指定一个或多个以.conf结束的配置文件。
`
## 子进程配置文件
一般放在:/etc/supervisor/conf.d/目录 。一个脚本对应一个配置文件,也可以将多个进程脚本放到一个文件中
配置说明:
 #*为必须填写项
#*[program:应用名称]
[program:cat]
#*命令路径,如果使用python启动的程序应该为 python /home/test.py, 
#不建议放入/home/user/, 对于非user用户一般情况下是不能访问
command=/bin/cat
#当numprocs为1时,process_name=%(program_name)s#
当numprocs>=2时,%(program_name)s_%(process_num)02d
process_name=%(program_name)s#进程数量
numprocs=1

directory=/tmp      
#执行目录,若有/home/supervisor_test/test1.py
#将directory设置成/home/supervisor_test
#则command只需设置成python test1.py
#否则command必须设置成绝对执行目录
#掩码:--- -w- -w-, 转换后rwx r-x w-x
umask=022
#优先级,值越高,最后启动,最先被关闭,默认值999
priority=999
#如果是true,当supervisor启动时,程序将会自动启动
autostart=true
#*自动重启
autorestart=true        #当程序exit的时候,这个program不会自动重启,默认unexpected,设置子进程挂掉后自动重启的情况,有三个选项,false,unexpected和true。如果为false的时候,无论什么情况下,都不会被重新启动,如果为unexpected,只有当进程的退出码不在下面的exitcodes里面定义autorestart=false 
#启动延时执行,默认1秒,如果有遇到频繁启动的情况,可以将时间修改为0
startsecs=10
#启动尝试次数,默认3次
startretries=3
#当退出码是0,2时,执行重启,默认值0,2
exitcodes=0,2
#停止信号,默认TERM
#中断:INT(类似于Ctrl+C)(kill -INT pid),退出后会将写文件或日志(推荐)
#终止:TERM(kill -TERM pid)
#挂起:HUP(kill -HUP pid),注意与Ctrl+Z/kill -stop pid不同
#从容停止:QUIT(kill -QUIT pid)
#KILL, USR1, USR2其他见命令(kill -l),说明1
stopsignal=TERM

stopwaitsecs=10

#*以root用户执行
user=root

#重定向
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" # 如果环境变量有多个,可以使用:隔开,例如:environment=LD_LIBRARY_PATH=/home/T/build:/home/T/AC/build:/opt
serverurl=AUTO

简化模板

[program:echo_time]
command=sh /tmp/echo_time.sh
autostart=true
autorestart=true
startsecs=10
startretries=3 
exitcodes=0,2
stopsignal=QUIT
stopwaitsecs=10
user=root
log_stdout=true
log_stderr=true
logfile=/tmp/echo_time.log
logfile_maxbytes=1MB
logfile_backups=10 
stdout_logfile_maxbytes=20MB 
stdout_logfile_backups=20 
stdout_logfile=/tmp/echo_time.stdout.log

如果上面的模板里增加下面两句:
下面展示:

process_name=%(process_num)02d
numprocs=3

supervisorctl 是客户端程序,用于向supervisord发起命令。
通过supervisorctl -h可以查看帮助说明。我们主要关心的是其action命令:

$ supervisorctl  help

default commands (type help <topic>):
=====================================
add    exit      open  reload  restart   start   tail   
avail  fg        pid   remove  shutdown  status  update 
clear  maintail  quit  reread  signal    stop    version

这些命令对于控制子进程非常重要。示例:

reread ;重新加载配置文件
update ;将配置文件里新增的子进程加入进程组,如果设置了autostart=true则会启动新新增的子进程
status ;查看所有进程状态
status <name> ;查看指定进程状态
start all; 启动所有子进程
start <name>; 启动指定子进程
restart all; 重启所有子进程
restart <name>; 重启指定子进程
stop all; 停止所有子进程
stop <name>; 停止指定子进程
reload ;重启supervisord
add <name>; 添加子进程到进程组
reomve <name>; 从进程组移除子进程,需要先stop。注意:移除后,需要使用reread和update才能重新运行该进程

端口默认是监听127.0.0.1:9001,这里方便测试,修改为:

port=*:9001 

浏览器访问:http://127.0.1:9001 ,输入用户名、密码后,即可看到web页面

常见报错问题

1.报错 unix:///var/run/supervisor.sock no such file
方案1:
1.1.先停止supervisor
systemctl sotp supervisor.service
1.2.查看是否有supervisord进程没有结束,并杀死
ps -ef|grep supervisor |grep -v grep|cut -c 9-15|xargs kill -9
方案2:
2.1使用以下命令,重新加载配置文件。整个服务会自动启动
supervisord -c /etc/supervisor/supervisord.conf #使用-n -c的话可同时在终端看到运行日志及报错(如果有报错的话)
#或
/usr/bin/python2 /usr/bin/supervisord -c /etc/supervisor/supervisord.conf

  1. 报错 Error: Another program is already listening on a port that one of our HTTP servers is configured to use. Shut this program down first before starting supervisord

    2.1.尝试关闭配置文件中包含的所有服务
    supervisorctl status
    supervisorctl stop [programName]
    2.2.如果关闭不掉,试用命令ps ax |grep supervisor 查看pid,杀掉所有查看到的进程。
    ps -ef|grep supervisor |grep -v grep|cut -c 9-15|xargs kill -9
    2.3.如果还是报错,取消socket的软连接。注意,下方的路径是在supervisord.conf中声明的。
    unlink /var/run/supervisor.sock
    unlink /tmp/supervisor.sock
    supervisord -c /etc/supervisor/supervisord.conf

3.报错 [line 57]: ‘json module not found, using jsonujson module not found, using jsonujson module not found, using json\n’

此问题不是json模块找不到,是配置文件格式不对,仔细检查或重写配置文件就能搞定。

4.报错[Errno 13] Permission denied: ‘/tmp/supervisord.log’

加sudo执行,主要是访问路径需要root权限,可考虑将路径修改为本地home路径下

5.报错Error: Another program is already listening on a port that one of our HTTP servers is configured to use. Shut this program down first before starting supervisord.

直接使用ps ax |grep supervisor 查看pid,并杀掉所有查看到的进程。

ps -ef|grep supervisor |grep -v grep|cut -c 9-15|xargs kill -9 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/13100.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

MySql常见复合查询(重点)

复合查询&#xff08;重点&#xff09; 多表查询 实际开发中往往数据来自不同的表&#xff0c;所以需要多表查询。本节我们用一个简单的公司管理系统&#xff0c;有三张表 EMP,DEPT,SALGRADE来演示如何进行多表查询。 显示雇员名、雇员工资以及所在部门的名字因为上面的数据来…

如何解决Web前端安全问题?

我国网络技术水平的提升&#xff0c;带动着WEB前端业务量的显著增长&#xff0c;人们对于网络服务的需求也日益复杂&#xff0c;与此同时&#xff0c;越来越多的黑客出现&#xff0c;其攻击水平也有了明显提升&#xff0c;WEB前端也成为了众多黑客进行网络攻击的主要目标。 因…

什么是零代码?零代码与低代码有什么联系与区别?

传统的软件研发方式目前并不能很好地满足企业的需求&#xff1a;人员成本高、研发时间长、运维复杂。 这时零代码或低代码工具出现在市面上并被关注就是必然趋势了。对于不太了解两者的人来说&#xff0c;零代码和低代码是什么&#xff1f;又有什么联系与区别&#xff1f; 01 …

uni小程序——评论、文本域、发送、键盘调起、有值后按钮变色等

一、简介 文本域默认显示一行&#xff0c;最多显示4行&#xff0c;到了4行之后不再增高。 输入值后按钮变色 二、案例演示 三、代码 <template><view><view class"plBox"><textarea auto-height"true" maxlength"-1" :s…

[Linux安装软件详解系列]04 安装Redis

目录1、查看服务器是否已安装Redis2、安装Redis1&#xff09;下载2&#xff09;解压3&#xff09;安装4&#xff09;移动配置文件到安装目录下5&#xff09;配置redis为后台启动6&#xff09;将redis-cli&#xff0c;redis-server拷贝到bin下7&#xff09;启动redis8&#xff0…

RabbitMQ简介及在Linux中安装部署(yum)

一、RabbitMQ简介及其作用 RabbitMQ简介 RabbitMQ是在2007 年发布&#xff0c;是一个在 AMQP(高级消息队列协议)基础上完成的&#xff0c;可复用的企业消息系统&#xff0c;是当前最主流的消息中间件之一。RabbitMQ是一个由erlang开发的AMQP&#xff08;Advanced Message Queu…

Arcpy入门教程01:从零开始制作一个arcpy脚本

从零开始制作一个arcpy脚本 文章目录 需求分析代码实现构造临时工作目录数据处理过程及API解析脚本打包代码封装在红盒子中创建脚本报错提醒 EOL while scanning string literal完整代码需求分析 我们现在有一个GDB存储这西安市各个区的绿地面的GDB,以及碑林区和新城区的行政…

将时间序列转成图像——相对位置矩阵方法 Matlab实现

目录 1 方法 2 Matlab代码实现 3.结果 【若觉文章质量良好且有用&#xff0c;请别忘了点赞收藏加关注&#xff0c;这将是我继续分享的动力&#xff0c;万分感谢&#xff01;】 其他&#xff1a; 1.时间序列转二维图像方法及其应用研究综述_vm-1215的博客-CSDN博客 2.将时…

Nginx实现负载均衡

目录 一、环境准备 1、准备3台centos服务器 2、软件安装 二、负载均衡配置 三、其他分配策略 1、fair&#xff08;第三方&#xff09; 一、环境准备 1、准备3台centos服务器​​​​​​​ 服务器名称主机名IP安装服务备注Nginx反向代理服务器proxy192.168.1.10nginx关…

ES倒排序索引

前言 在学习Elasticsearch的使用前&#xff0c;我们先来了解下es是如何实现全文搜索的。 倒排索引是 Elasticsearch 中非常 重要的索引结构&#xff0c;从 文档单词到文档 ID 的过程 为什么要使用倒排索引 先看下面的商品数据goods id 标题 描述 1 小米手机 小米手机性…

【保姆级】新机器部署Redis

1、登录服务器&#xff0c;如果非root用户则切root用户 sudo su - 2、安装gcc yum install gcc-c 3、在/usr/tmp目录上传redis安装包 4、将安装包移到/opt/byd目录 mv redis-4.0.11.tar.gz /opt/byd 5、解压 & 重命名 tar -xzvf redis-4.0.11.tar.gz mv redis-4.0.11 …

安全狗受邀出席CIS 2022网络安全创新大会

11月16日&#xff0c;由网络安全行业门户Freebuf主办的CIS 2022网络安全创新大会&#xff08;简称CIS&#xff09;在上海主会场顺利开幕。 作为国内云原生安全领导厂商&#xff0c;安全狗也收到邀请出席此次活动。 据悉&#xff0c;此次大会分为上海、北京、深圳等多个会场&am…

Pytorch中的DDP

一. 概览 DDP的原理&#xff1f; 在分类上&#xff0c;DDP属于Data Parallel。简单来讲&#xff0c;就是通过提高batch size来增加并行度。为什么快&#xff1f; DDP通过Ring-Reduce的数据交换方法提高了通讯效率&#xff0c;并通过启动多个进程的方式减轻Python GIL的限制&am…

2022-11-17 mysql列存储引擎-聚合运算中间结果缓存磁盘文件以避免OOM-需求分析

摘要: mysql列存储引擎-聚合运算中间结果缓存磁盘文件以避免OOM-需求分析 关联ISSUE: https://github.com/stoneatom/stonedb/issues/21 需求分析ISSUE: https://github.com/stoneatom/stonedb/issues/949 上下文说明: 当前聚合运算的结果都缓存在了内存的HASH中, 一旦数据量…

数据库等值查询与统计信息

概念 统计信息是为优化器的 cost 估算提供数据支撑&#xff0c;其中很重要的一点需求便是等值查询(EQUALS, IN 等) 场景下的基数估算。考虑以下 Case CREATE TABLE mc_tac_template (ID BIGINT ,NAME varchar(50) NOT NULL,GENDER varchar(10) NOT NULL,PRIMARY KEY (ID),KEY K…

工业设计公司的办公环境有哪些特点?

设计公司的办公环境一直被称之为个性化的意味着&#xff0c;见惯了新科技公司的各类智能化豪情万丈的办公环境&#xff0c;也有别于正儿八经办公楼的循规蹈矩&#xff0c;每个设计公司的公司办公室总似一股清流一般的存在&#xff0c;自然各种设计公司&#xff0c;如平面、工业…

Flutter 在项目中使用动画(不使用包)

Flutter 在项目中使用动画(不使用包) 前言 动画对于 web 和移动应用程序都非常重要。但是在移动应用程序中不应该使用夸张的动画。简单但是很多动画使你的应用程序更好用。以至于当你点击一个按钮时&#xff0c;一种平滑的感觉或者页面过渡都会影响到你。 正文 1 按下按钮柔软的…

UNIAPP实战项目笔记39 我的页面布局

UNIAPP实战项目笔记39 我的页面布局 my.vue 我的页面布局 具体图片自己替换哈&#xff0c;随便找了个图片的做示例 代码 pages.json部分 去掉默认导航栏&#xff0c;改为自定义导航栏 ,{"path" : "pages/my/my","style" : …

408 | 【数据结构】 排序 —— 总复习框架总结

(一)排序的基本概念 排序算法的稳定性:经过排序后,能使关键字相同的元素保持原顺序中的相对位置不变。 (二)内部排序 2.1、插入排序 算法思想:每次将一个待排序的记录按其关键字大小插入到前面已排好序的子序列中,直到全部记录插入完成。 2.1.1、直接插入排序 顺…

通过Xamarin实现东大集成PDA的扫码

目录1、东大集成PDA的扫码说明2、Xamarin通过广播实现扫码2.1 PDA的扫码工具设置2.2 代码实现2.2.1 主界面2.2.1 定义广播接收器2.2.2 在活动页面实现读取2.3 实现效果3、demo下载1、东大集成PDA的扫码说明 东大集成的PDA有两种方式实现设备自带的扫码功能。一种为调用硬件接口…