您现在的位置是:首页 > 经验记录>日常笔记>Ubuntu上安装和配置Supervisor及运行pkg_resources.DistributionNotFound:报错处理 网站首页 日常笔记
Ubuntu上安装和配置Supervisor及运行pkg_resources.DistributionNotFound:报错处理
一、前言
方便:为所有单流程实例编写 rc.d 很不方便。同样,Rc.d 脚本不会自动重新启动崩溃的进程。但是,可以将 Supervisor 配置为在进程崩溃时自动重启进程。
准确性: 在 UNIX 中,通常很难获得进程的准确启动/停止状态。Supervisor 将进程作为子进程启动,因此它知道其子进程的 up/down 状态。这很容易为最终用户查询。
二、Supervisor安装与配置
1.安装
sudo apt update && sudo apt install supervisor
sudo systemctl status supervisor
2. 添加程序
在 Supervisor 下运行的所有程序都必须在非守护模式下运行(有时也称为“前台模式”)。如果默认情况下你的程序在运行后会自动返回到 shell,那么你可能需要查阅程序的手册来找到启用此模式的选项,否则 Supervisor 将无法正确确定程序的状态。
2.1 创建一个脚本(可忽略)
sudo touch /home/mulan/analysis_service.sh
2.2 创建配置文件
Supervisor程序的每个程序配置文件位于 /etc/supervisor/conf.d
目录中,通常每个文件运行一个程序,并以.conf
结尾。我们将为此脚本创建一个配置文件,as'/etc/supervisor/conf.d/idle.conf:
sudo touch /etc/supervisor/conf.d/algo-analysis.conf
添加以下内容:
[program:algo-analysis-service] command=/bin/bash -c /home/mulan/analysis_service.sh autostart=true autorestart=true startretries=3 stderr_logfile=/var/log/analysis_service.err.log stdout_logfile=/var/log/analysis_service.out.log
注意:上面当我使用下述command的时候,会出现“can't find command”的错误而导致服务起不来,那是因为Supervisor does not start a shell at all, either bash or sh -- so it's no surprise that it can't find shell-builtin commands. If you need one, you're obliged to start one yourself. 详情可参考:bash - Why can't supervisor find command source - Stack Overflow
command=/home/mulan/analysis_service.sh
加上/bin/bash -c之后,服务就正常起来了:
创建并保存配置文件后,我们可以通过 supervisorctl 命令通知 Supervisor 我们的新程序。首先,我们告诉 Supervisor 在/etc/supervisor/conf.d 目录中查找任何新的或已更改的程序配置:
sudo supervisorctl reread
sudo supervisorctl update
sudo tail /var/log/analysis_service.out.log
3. 管理程序
除了正在运行的程序之外,您还需要停止、重新启动或查看它们的状态。我们在上面使用的 supervisorctl 程序也有一个交互模式,我们可以使用它来控制我们的程序。
要进入交互模式,请运行不带参数的 supervisorctl:
sudo supervisorctl
supervisorctl
最初将打印所有已配置程序的状态和正常运行时间,然后是其命令提示符。输入help
将显示其所有可用命令:
您可以使用关联的命令后跟程序名称来start
or stop
程序:
最后,您可以使用 Ctrl+C 或输入quit提示符退出 supervisorctl。
4.启用 Supervisor Web 界面
Supervisor 提供了一个基于 Web 的界面来管理所有进程,但默认情况下它是禁用的。您可以通过编辑文件 /etc/supervisor/supervisord.conf 来启用它:
sudo vim /etc/supervisor/supervisord.conf
添加以下行:
[inet_http_server] port=*:9001 username=admin password=admin
保存并关闭文件,然后重新启动 Supervisor 服务以应用更改:
systemctl restart supervisor
5.访问Supervisor Web 界面
您现在可以使用 URL http://your-server-ip:9001访问 Supervisor Web 界面。提供您在配置文件中定义的管理员用户名和密码,然后单击登录按钮。您应该在以下页面中看到 Supervisor Web 界面:
转至:https://blog.csdn.net/zhumin19910702/article/details/127756095
supervisorctl 解决报错 pkg_resources.DistributionNotFound: The ‘supervisor==3.3.4‘ distribution
错误如下
[root@172.16.0.1:conf]# supervisorctl status Traceback (most recent call last): File "/usr/bin/supervisorctl", line 5, in <module> from pkg_resources import load_entry_point File "build/bdist.linux-x86_64/egg/pkg_resources/__init__.py", line 3250, in <module> File "build/bdist.linux-x86_64/egg/pkg_resources/__init__.py", line 3234, in _call_aside File "build/bdist.linux-x86_64/egg/pkg_resources/__init__.py", line 3263, in _initialize_master_working_set File "build/bdist.linux-x86_64/egg/pkg_resources/__init__.py", line 583, in _build_master File "build/bdist.linux-x86_64/egg/pkg_resources/__init__.py", line 900, in require File "build/bdist.linux-x86_64/egg/pkg_resources/__init__.py", line 786, in resolve pkg_resources.DistributionNotFound: The 'supervisor==3.3.4' distribution was not found and is required by the application
二、问题修复
发现版本确实是不一致的,接下来查看问题机器python位置
[root@172.16.0.1:conf]# whereis python python: /usr/bin/python2.6 /usr/bin/python /usr/lib/python2.6 /usr/lib64/python2.6 /usr/local/bin/python2.7 /usr/local/bin/python2.7-config /usr/local/bin/python /usr/local/lib/python2.7 /usr/include/python2.6 /usr/share/man/man1/python.1.gz
查看/usr/bin/supervisorctl 和 /usr/bin/supervisord 文件。发现文件内容开头都是 #!/usr/bin/python
说明他调用的是python2.7.13,那么直接修改这两个文件的python调用路径
随机推荐
- 在 Laravel 中使用 基于Workerman 的Gateway-worker进行 socket 长连接通讯
- Js操作Select大全(取值、设置选中等等)
- centos7下配置好网络之后ssh登录失败怎么办
- mqtt服务器(emqx)如何在页面使用webSocket连接?(可带用户名密码认证)
- 使用ceph-deploy 2.0.0 部署ceph 12.2.5集群
- cywin安装后怎么安装新的软件
- Laravel框架下,页面(包含大量echarts图表)html导出为PDF实现,可批量.
- ceph-对象存储服务搭建
- Laravel路由笔记,参数包含斜杠"/"如何处理?非必须参数如何定义?
- laravel redis 操作命令集