您现在的位置是:首页 > 经验记录>日常笔记>Ubuntu上安装和配置Supervisor及运行pkg_resources.DistributionNotFound:报错处理 网站首页 日常笔记

Ubuntu上安装和配置Supervisor及运行pkg_resources.DistributionNotFound:报错处理

一、前言

在许多服务器环境中,通常情况下,您将拥有许多要持久运行的小程序,无论这些程序是小型shell脚本,Node.js应用程序还是任何大型软件包。

Supervisor是一个进程管理器,它提供了一个单一的界面来管理和监视许多长时间运行的程序。在本教程中,您将在 Linux 服务器上安装 Supervisor,并学习如何管理多个应用程序的 Supervisor 配置。

以下是 Supervisor 的主要优势:

    方便:为所有单流程实例编写 rc.d 很不方便。同样,Rc.d 脚本不会自动重新启动崩溃的进程。但是,可以将 Supervisor 配置为在进程崩溃时自动重启进程。

    准确性:  在 UNIX 中,通常很难获得进程的准确启动/停止状态。Supervisor 将进程作为子进程启动,因此它知道其子进程的 up/down 状态。这很容易为最终用户查询。


二、Supervisor安装与配置

1.安装

sudo apt update && sudo apt install supervisor

03624b20da8c53489de16c49508dbcb4.png


Supervisor服务在安装后自动运行(这点从安装后创建的symlink到systemd的自启动服务可以看出)。检查其状态:

sudo systemctl status supervisor

2.png


2. 添加程序

使用 Supervisor 的最佳实践是为它将处理的每个程序编写一个配置文件。

在 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  


3.png

加上/bin/bash -c之后,服务就正常起来了:

4.png

创建并保存配置文件后,我们可以通过 supervisorctl 命令通知 Supervisor 我们的新程序。首先,我们告诉 Supervisor 在/etc/supervisor/conf.d 目录中查找任何新的或已更改的程序配置:

sudo supervisorctl reread 


5.png

然后告诉它通过以下方式进行任何更改:

sudo supervisorctl update

6.png

每当您对任何程序配置文件进行更改时,运行前面的两个命令都会使更改生效。
此时我们的程序应该正在运行。我们可以通过查看输出日志文件来检查它的输出:

sudo tail /var/log/analysis_service.out.log 

3. 管理程序

除了正在运行的程序之外,您还需要停止、重新启动或查看它们的状态。我们在上面使用的 supervisorctl 程序也有一个交互模式,我们可以使用它来控制我们的程序。


要进入交互模式,请运行不带参数的 supervisorctl:

sudo supervisorctl


7.png

supervisorctl最初将打印所有已配置程序的状态和正常运行时间,然后是其命令提示符。输入help将显示其所有可用命令:

8.png

您可以使用关联的命令后跟程序名称来start or stop程序:

9.png


使用tail命令,您可以查看程序的 stdout 和 stderr 日志中的最新条目。

使用status您可以在进行任何更改后再次查看每个程序的当前执行状态:

10.png


最后,您可以使用 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


11.png

5.访问Supervisor Web 界面

您现在可以使用 URL http://your-server-ip:9001访问 Supervisor Web 界面。提供您在配置文件中定义的管理员用户名和密码,然后单击登录按钮。您应该在以下页面中看到 Supervisor Web 界面:

12.png

参考:

Introduction — Supervisor 4.2.4 documentation(官方文档)

转至: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版本更新,而新版本的python未安装supervisor

二、问题修复

首先查看问题机器python版本

[root@172.16.0.1:conf]# python --version
Python 2.7.1312

其他机器

[devops@localhost ~]$ python --version
Python 2.6.6

发现版本确实是不一致的,接下来查看问题机器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调用路径


均改为 #!/usr/bin/python2.6 (每台机器路径不一样,请依据上面命令查看)

问题解决


文章评论

未开放
Top