在Ubuntu 16.04上安装和配置Supervisor

Supervisor是一个客户机/服务器系统,用于控制许多UNIX进程,更具体地说是与项目或客户相关的进程。例如,您可以使用管理程序来生成和监视Web应用程序中任意数量的工作队列。

该系统的组件为:

  • 有监督的:系统的服务器部分。
  • Supervisorctl:用于与服务器交互的命令行界面。
  • Web服务器:supervisorctl相比,具有基本功能的简单Web服务器和Web用户界面。
  • XML-RPC接口: Web客户端使用的同一HTTP服务器提供XML-RPC接口,该接口可用于控制主管程序。

在本教程中,我们将安装最新版本的Supervisor,演示如何通过生成和管理程序supervisorctl,以及配置Web界面来管理程序。

安装和基本配置

我们将通过easy_installpython的setuptools的功能安装超级用户。

首先,更新您的本地软件包列表,然后安装python setuptools

sudo apt-get update && sudo apt-get install python-setuptools

现在我们可以安装主管了。

sudo easy_install supervisor

安装完成后,我们必须生成我们的配置文件。创建一个名为supervisorinside 的文件夹/etc

sudo mkdir /etc/supervisor

然后执行以下操作。

echo_supervisord_conf >  /etc/supervisor/supervisord.conf

如果您未使用该root用户登录,则可能会收到Permission denied错误消息(即使使用也会出现此错误sudo)。这是由于重定向。要解决此问题,请以root用户身份登录。

sudo su

然后,您可以再次运行该命令。

echo_supervisord_conf > /etc/supervisor/supervisord.conf

现在,您可以rootexit命令留给用户。该echo_supervisord_conf命令由我们的主管安装提供。

基本配置

打开/etc/supervisor/supervisord.conf文件并检查其内容。您会注意到,此配置文件遵循INI语法,并且按部分划分(如中的括号所示[section-name])。

要添加要由主管管理的程序,我们只需要创建适当的[program]部分即可。但是,为避免每次需要添加(或更改)程序时都将主配置文件弄乱,我们将使用这一[include]部分。找到本节,取消注释,然后对其进行编辑,使其类似于以下内容。

[include]
files=conf.d/*.conf

现在,对于我们要添加的每个程序,我们将.ini/etc/supervisor/conf.d/目录中创建一个文件。让我们创建这个文件夹。

sudo mkdir /etc/supervisor/conf.d

启动主管服务器

如前所述,主管由服务器和与其连接的客户端组成。为了能够管理和控制程序,我们需要启动服务器。为此,我们将在中注册主管服务器systemd,以便可以在系统启动时启动该服务器。

为此,请supervisord.service/etc/systemd/system目录中创建一个名为的文件。

sudo touch /etc/systemd/system/supervisord.service

将以下内容添加到文件中。

[Unit]
Description=Supervisor daemon
Documentation=http://supervisord.org
After=network.target

[Service]
ExecStart=/usr/local/bin/supervisord -n -c /etc/supervisor/supervisord.conf
ExecStop=/usr/local/bin/supervisorctl $OPTIONS shutdown
ExecReload=/usr/local/bin/supervisorctl $OPTIONS reload
KillMode=process
Restart=on-failure
RestartSec=42s

[Install]
WantedBy=multi-user.target
Alias=supervisord.service

激活监督服务。

sudo systemctl start supervisord.service

只要服务文件位于/etc/systemd/system目录中,它将在系统启动时自动启动。

您可以检查服务的状态。

systemctl status supervisord.service

另外,您可以签出日志。

sudo journalctl -u supervisord.service

添加程序

由主管控制的程序[program]在配置的不同部分中给出。对于我们要管理的每个程序,我们将创建一个独立的配置文件,通知命令可执行路径,任何环境变量以及在关机的情况下如何执行。

首先,让我们创建一个记录时间戳的简单脚本。创建一个名为hello_supervisor.sh(您希望在任何地方,我们将引用此脚本的完整路径)的文件。

touch hello_supervisor.sh

现在,将以下内容放入其中

#!/bin/bash
while true
do 
    # Echo current timestamp to stdout
    echo Hello Supervisor: `date`
    # Echo 'error!' to stderr
    echo An error ocurred at `date`! >&2
    sleep 1
done

现在使其可执行

chmod +x hello_supervisor.sh

实际上,该脚本几乎没有用。但是,我们可以使用它来展示主管的力量。通过运行以下命令来创建相应的配置文件。

sudo touch /etc/supervisor/conf.d/hello_supervisor.conf

现在将以下内容放入该文件。

[program:hello_supervisor]
command=/home/USER/hello_supervisor.sh
autostart=true
autorestart=true
stderr_logfile=/var/log/hello_supervisor.err.log
stdout_logfile=/var/log/hello_supervisor.out.log

注意: 请务必USER使用您的用户名替换。

我们将逐步检查此配置。

[program:hello_supervisor]
command=/home/USER/hello_supervisor.sh

首先,配置从定义名称为hello_supervisor的程序开始。它还通知要运行的可执行文件的完整路径。

autostart=true

此行指出,启动超级用户时,该程序应自动启动。

autorestart=true

如果程序由于某种原因退出,该行会通知主管自动重新启动该过程。

stderr_logfile=/var/log/hello_supervisor.err.log
stdout_logfile=/var/log/hello_supervisor.out.log

这些行定义日志文件位置stderrstdout分别。

管理程序

既然我们已经安装并配置了主管,就可以管理流程。

添加新程序后,我们应该运行以下两个命令,以通知服务器重新读取配置文件并应用所有更改。

sudo supervisorctl reread
sudo supervisorctl update

现在执行supervisorctl客户端。

sudo supervisorctl

您将看到已注册过程的列表。您将看到一个hello_supervisor带有RUNNING状态的过程。

hello_supervisor                 RUNNING   pid 6853, uptime 0:22:30
supervisor>

类型help为avaialable命令的列表。

supervisor> 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

概括地说,我们可以startstoprestart通过将程序名作为参数传递给相应的命令程序。

supervisor> stop hello_supervisor 
hello_supervisor: stopped
supervisor> start hello_supervisor 
hello_supervisor: started
supervisor> restart hello_supervisor 
hello_supervisor: stopped
hello_supervisor: started
supervisor> 

我们还可以通过tail命令查看程序输出。

supervisor> tail hello_supervisor 
Hello Supervisor: Mon Sep 25 19:27:29 UTC 2017
Hello Supervisor: Mon Sep 25 19:27:30 UTC 2017
Hello Supervisor: Mon Sep 25 19:27:31 UTC 2017

对于stderr输出,您也可以使用tail

supervisor> tail hello_supervisor stderr
An error ocurred at Mon Sep 25 19:31:12 UTC 2017!
An error ocurred at Mon Sep 25 19:31:13 UTC 2017!
An error ocurred at Mon Sep 25 19:31:14 UTC 2017!

通过调用status命令,您可以查看所有已注册程序的状态。

完成后,您可以退出。

supervisor> quit

网络服务器客户端

要允许访问受监管的Web服务器,请打开受监管的配置文件,然后找到该[inet_http_server]部分。

nano /etc/supervisor/supervisord.conf

现在,使用以下内容更新本节的配置。

[inet_http_server]
port=*:9001
username=your_username
password=your_password

替换your_usernameyour_password使用所需的凭据,保存您的修改和重新启动监督服务。

sudo systemctl restart supervisord.service

记住要允许TCP访问9001防火墙上的端口,然后再http://{server-ip}:9001从浏览器访问。询问时,请提供usernamepassword。现在,您可以从Web控制您的流程。

结论

我们已经安装了supervisor的最新版本,了解了如何配置它以使用systemd进行系统自动启动,还介绍了的基本用法supervisorctl。有关更高级的配置和用例,请参阅官方指导性文档



Leave a Comment

AI 能否應對越來越多的勒索軟件攻擊?

AI 能否應對越來越多的勒索軟件攻擊?

勒索軟件攻擊呈上升趨勢,但人工智能能否幫助應對最新的計算機病毒?AI 是答案嗎?在這裡閱讀知道是 AI 布恩還是禍根

ReactOS:這是 Windows 的未來嗎?

ReactOS:這是 Windows 的未來嗎?

ReactOS,一個開源和免費的操作系統,這裡有最新版本。它能否滿足現代 Windows 用戶的需求並打倒微軟?讓我們更多地了解這種老式但更新的操作系統體驗。

通過 WhatsApp 桌面應用程序 24*7 保持聯繫

通過 WhatsApp 桌面應用程序 24*7 保持聯繫

Whatsapp 終於為 Mac 和 Windows 用戶推出了桌面應用程序。現在您可以輕鬆地從 Windows 或 Mac 訪問 Whatsapp。適用於 Windows 8+ 和 Mac OS 10.9+

人工智能如何將流程自動化提升到新的水平?

人工智能如何將流程自動化提升到新的水平?

閱讀本文以了解人工智能如何在小型公司中變得流行,以及它如何增加使它們成長並為競爭對手提供優勢的可能性。

macOS Catalina 10.15.4 補充更新引發的問題多於解決

macOS Catalina 10.15.4 補充更新引發的問題多於解決

最近,Apple 發布了 macOS Catalina 10.15.4 補充更新以修復問題,但似乎該更新引起了更多問題,導致 mac 機器變磚。閱讀這篇文章以了解更多信息

大數據的13個商業數據提取工具

大數據的13個商業數據提取工具

大數據的13個商業數據提取工具

什麼是日誌文件系統,它是如何工作的?

什麼是日誌文件系統,它是如何工作的?

我們的計算機以稱為日誌文件系統的有組織的方式存儲所有數據。這是一種有效的方法,可以讓計算機在您點擊搜索時立即搜索和顯示文件。 https://wethegeek.com/?p=94116&preview=true

技術奇點:人類文明的遙遠未來?

技術奇點:人類文明的遙遠未來?

隨著科學的快速發展,接管了我們的大量工作,我們陷入無法解釋的奇點的風險也在增加。閱讀,奇點對我們意味著什麼。

洞察 26 種大數據分析技術:第 1 部分

洞察 26 種大數據分析技術:第 1 部分

洞察 26 種大數據分析技術:第 1 部分

2021 年人工智能對醫療保健的影響

2021 年人工智能對醫療保健的影響

過去幾十年,醫療保健領域的人工智能取得了巨大飛躍。因此,醫療保健中人工智能的未來仍在日益增長。