进程管理工具supervisor的使用、常见报错问题处理

  • 1 安装
  • 2 简介
    • 2.1 supservisor自身提供三个命令:
      • 2.1.1 supervisorctl
      • 2.1.2 supervisord
      • 2.1.3 echo_supervisord_conf
    • 2.2 配置文件
    • 2.3 重要事项
    • 2.4 查看supervisor的log日志
  • 3 配置
    • 3.1 修改配置文件
    • 3.2 加载配置文件
    • 3.3 访问网页版管理页面
  • 4 常见报错问题
    • 4.1 报错 unix:///var/run/supervisor.sock no such file
    • 4.2 报错 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
    • 4.3 cpu占用率过高的问题
    • 4.4 报错 [line 57]: 'json module not found, using jsonujson module not found, using jsonujson module not found, using json\n'

1 安装

apt-get install supervisor

2 简介

2.1 supservisor自身提供三个命令:

2.1.1 supervisorctl

supervisorctl:类似systemctl,用于管理进程,如启动、停止、重启

supervisorctl status 查看应用名称【programeName 】及其运行状态
/etc/init.d/supervisor restart 重启supervisor ,网上说可以重新加载配置问文件,亲测无效
systemctl stop supervisor 停止supervisor
supervisorctl stop [programName] 停止指定应用
supervisorctl start [programName] 启动指定应用
supervisorctl restart [programName] 重启指定应用
supervisorctl stop all 停止所有应用
supervisorctl reload 载入最新的配置文件,重启所有进程
supervisorctl update 根据最新的配置,重启配置更改过的进程,未更新的进程不受影响

2.1.2 supervisord

supervisord:加载配置文件,一个配置文件一个子进程。当挂载的子进程出现奔溃时会自动重启
下面这条命令会加载supervisord.conf文件(主配置文件),此时supervisor如果是停止状态,会自动启动

supervisord -c /etc/supervisor/supervisord.conf

增加-n参数,可以实时查看启动时的日志输出,使用ctrl+c退出(退出不影响进程)

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

2.1.3 echo_supervisord_conf

echo_supervisord_conf : 输出自带的配置文件内容。一般用于配合以下命令生成配置文件。

echo_supervisord_conf > xxx.conf

2.2 配置文件

/etc/supervisor/supervisor.conf 主配置文件。
一般用于配置supservisor的通用参数,如指定自动加载的目录,设置http服务地址等。
/etc/supervisor/conf.d自定义的进程管理文件存放目录。
主要添加进程名、进程组、进程的启动命令、进程的log日志路径等参数。

2.3 重要事项

● supervisor 不支持监听后台启动的进程。所有在配置文件中添加启动命令的时候,不要添加后台启动部分的命令。
● 修改完配置文件,需要手动重启supervisor才能生效(或者重新加载、更新都行)

2.4 查看supervisor的log日志

这个日志文件是查看supservisor自身的日志,其管理的进程输出的日志在配置文件中声明。
sudo cat /var/log/supervisor/supervisord.log

3 配置

3.1 修改配置文件

  1. 备份默认的配置文件

    cp /etc/supervisor/supervisord.conf /etc/supervisor/supervisord.conf_bak
    
  2. 重新生成配置文件
    echo_supervisord_conf > supervisord.conf
    
  3. vim编辑器打开配置文件
    vim /etc/supervisor/supervisord.conf
    
  4. 修改参数,主要内容如下。
    修改时一定要注意路径,默认的是/temp,需要改成/var/run/

    [unix_http_server]
    file=/var/run/supervisor.sock   ; (the path to the socket file)[inet_http_server]         ; inet (TCP) server disabled by default
    port=*:9001        ; (ip_address:port specifier, *:port for all iface)[supervisord]
    logfile=/var/log/supervisor/supervisord.log ; (main log file;default $CWD/supervisord.log)
    logfile_maxbytes=50MB        ; (max main logfile bytes b4 rotation;default 50MB)
    logfile_backups=10           ; (num of main logfile rotation backups;default 10)
    loglevel=info                ; (log level;default info; others: debug,warn,trace)
    pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
    nodaemon=false               ; (start in foreground if true;default false)
    minfds=1024                  ; (min. avail startup file descriptors;default 1024)
    minprocs=200                 ; (min. avail process descriptors;default 200)
    childlogdir=/var/log/supervisor            ; ('AUTO' child log dir, default $TEMP)[rpcinterface:supervisor]
    supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface[supervisorctl]
    serverurl=unix:///var/run/supervisor.sock ; use a unix:// URL  for a unix socket[include]
    files = /etc/supervisor/conf.d/*.conf
    
  5. 创建一个应用配置文件a.conf,然后进行编辑
    vim /etc/supervisor/conf.d/a.conf
    

    参考内容如下,移动要注意command参数不能使用后台启动命令,不然supervisor监听不了

    [group:tornados]#创建一个应用组
    programs=dtaa,iothttp_zhonghe#应用组中的程序名
    stopasgroup=true[program:dtaa]#dtaa应用程序启动参数
    command=/opt/dtaa/venv/bin/python /opt/dtaa/app.py#解释器要用绝对路径,后进默认在directory变量指定的目录中
    directory=/opt/dtaa#应用路径
    user=root
    autostart=true
    autorestart=true
    redirect_stderr=true
    stdout_logfile=/opt/dtaa/log.out
    loglvel=info[program:iothttp_zhonghe]#第二个应用程序的启动参数
    command=/opt/iothttp/venv/bin/python app.py --c=config_zhonghe --s=main_zhonghe#解释器要用绝对路径,后进默认在directory变量指定的目录中
    directory=/opt/iothttp
    user=root
    autostart=true
    autorestart=true
    redirect_stderr=true
    stdout_logfile=/opt/iothttp/log_zhonghe.out
    loglvel=info
    

3.2 加载配置文件

  1. 加载主配置文件,应用配置文件会跟随启动

    supervisord -c /etc/supervisor/supervisord.conf
    

    如果已经加载过,只要使用update或reload方法

    supervisorctl update
    
  2. 查看启动状态
    supervisorctl  status
    

    结果如下,第一列就是应用名称拉

    tornados:dtaa                    RUNNING   pid 21580, uptime 1:17:37
    tornados:iothttp_zhonghe         RUNNING   pid 18731, uptime 1:19:42
    

3.3 访问网页版管理页面

尝试访问配置文件中的9001端口,这样管理起来就很方便了。

4 常见报错问题

4.1 报错 unix:///var/run/supervisor.sock no such file

  • 方案1:
    (1)先停止supervisor

    systemctl sotp supervisor.service
    

    (2)然后查看是否有supervisord进程没有结束

    ps ax |grep supervisor
    

    如果有进程没结束就手动杀死

    kill -9 [pid]
    

    (3)使用以下命令,重新加载配置文件。整个服务会自动启动

    supervisord -c /etc/supervisor/supervisord.conf
    #或
    /usr/bin/python2 /usr/bin/supervisord -c /etc/supervisor/supervisord.conf
    
  • 方案2:
    (1)问题原因是文件被系统删除,可以手动创建sock文件。然后重新加载配置

    sudo touch /var/run/supervisor.sock
    sudo chmod 777 /var/run/supervisor.sock
    supervisord -c /etc/supervisor/supervisord.conf
    

    (2)然后查看supervisord的进程,如果有重复进程需要进行查杀,否则cpu占用率可能会比较高。

    ps ax |grep supervisor
    #如果有多余进程没结束就手动杀死
    kill -9 [pid]
    

4.2 报错 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

(1)尝试关闭配置文件中包含的所有服务

supervisorctl status
supervisorctl stop [programName]

(2)如果关闭不掉,试用命令ps ax |grep supervisor 查看pid,杀掉所有查看到的进程。

ps ax |grep supervisor
kill -9 [pid]

(3)如果还是报错,取消socket的软连接。注意,下方的路径是在supervisord.conf中声明的。

unlink /var/run/supervisor.sock
unlink /tmp/supervisor.sock
supervisord -c /etc/supervisor/supervisord.conf

4.3 cpu占用率过高的问题

(1) 使用以下命令查看是否有重复启动的配置文件

ps -ax |grep supervisor

(2) 使用kill命令杀掉多余的进程,只保留以一个

ps ax |grep supervisor
#如果有多余进程没结束就手动杀死
kill -9 [pid]

(3) 如果还是占用率过高,使用以下命令编辑配置文件,把http服务注释掉

vim /etc/supervisor/supervisor.conf

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

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


end~! 欢迎点赞、收藏、转发和评论

进程管理工具supervisor的使用、常见报错问题处理相关推荐

  1. python怎么打开程序管理器_Python 进程管理工具 Supervisor 使用教程

    因为我的个人网站 restran.net 已经启用,博客园的内容已经不再更新.请访问我的个人网站获取这篇文章的最新内容,Python 进程管理工具 Supervisor 使用教程 Supervisor ...

  2. 进程管理工具(Supervisor)笔记

    感谢GoFrame框架实战2群的 朽木自雕 大佬提供的Supervisor笔记 # 开发笔记## [进程管理工具(Supervisor)](http://supervisord.org/introdu ...

  3. Linux进程管理工具 Supervisor详解

    介绍 Supervisor安装与配置(linux/unix进程管理工具) Supervisor(http://supervisord.org)是用Python开发的一个client/server服务, ...

  4. 进程管理工具Supervisor

    简介 Supervisor是一个客户端/服务器系统,允许用户在类UNIX操作系统上控制许多进程.它是基于python语言开发一个进程管理工具. Supervisor的服务器端称为supervisord ...

  5. python怎么打开程序管理器_python进程管理工具supervisor的安装与使用教程

    前言 在一个分布式环境中,每台机器上可能需要启动和停止多个进程,使用命令行方式一个一个手动启动和停止非常麻烦,而且查看每个进程的状态也很不方便.如果有一个工具能够实现每台机器上多个进程的简单高效中心化 ...

  6. linux进程管理工具supervisor

    英文比较好的朋友,可以查看这篇文章 https://www.digitalocean.com/community/tutorials/how-to-install-and-manage-supervi ...

  7. linux进程管理工具supervisor安装卸载、子配置文件详解、遇到的问题、supervisor group群组管理、启动一个springboot项目示例、update命令注意点

    简介 Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启. 它是通过fork/exec的方式把这些被管 ...

  8. Linux自启进程管理工具,进程管理工具Supervisor的安装及使用

    需求:有一个进程需要每时每刻不断的跑,但是这个进程又有可能由于各种原因有可能中断.当进程中断的时候我需要他能自动重启,保证服务一直在跑着.基于整个需求,一开始想的是起一个脚本,监听该服务的端口,一旦发 ...

  9. Python实现的进程管理神器——Supervisor

    文章目录 常用命令 简介 安装 创建配置文件 开机自启 初试 Web 界面 配置文件 子进程配置模板 可用变量 supervisorctl 命令 Supervisor 组件 卸载 遇到的坑 参考文献 ...

最新文章

  1. Android中有关Handler的总结
  2. python selenium 处理弹窗_python selenium 弹出框处理的实现
  3. java反射po转vo_三步走使用Dozer (Do,Po,Vo转换工具)
  4. 单例模式存在的问题——破坏单例模式,序列化和反射
  5. CSS滤镜实现火狐、IE兼容
  6. 恒压板框过滤实验数据处理_高考化学实验中:那些不常见的【特殊仪器】与装置,难得的资料...
  7. springboot 排除 默认的loggback 和slf4j的依赖
  8. python多分类画roc曲线_利用python制作ROC曲线进行多分类
  9. 基于lis3dh的简易倾角仪c源码_开源网关apisix源码阅读和最佳实践
  10. Robot Framework安装过程
  11. php更改二维数组的键,学习猿地-php如何修改二维数组的键名
  12. java对音频文件的频谱分析
  13. mysql忘记密码如何重置密码
  14. GoF 23种设计模式
  15. 计算机网络中常见英文缩写所对应的名词整理
  16. html网页设计的难点,在做设计与制作网页中主要难点是什么?
  17. 【0709作业】简易的购房商贷月供计算器
  18. 论文翻译:2021_TSCN:Decoupling magnitude and phase optimization with a two-stage deep network
  19. python中ix用法_Python Pandas DataFrame.ix[ ]用法及代码示例
  20. ECCV 2020 五项大奖出炉!普林斯顿邓嘉获最佳论文奖

热门文章

  1. vue-element-admin登录接口修改
  2. 微信H5页面生成图片并长按下载
  3. hnu云计算个人实验报告——实验一
  4. 稳定婚姻(tarjan)
  5. BitRecover PST Converter Wizard 10.8 中文版
  6. windows DHCP服务器部署
  7. Cocos2dx3.2编写常用UI组件(四)发光的标题BlinkTitile
  8. 力扣978最长湍流子数组——Python解答
  9. python制作图片数据集_制作图片数据集
  10. java jxl包_java利用JXL包操作Excel表