如何安装和管理 Supervisor

本文涉及的产品
日志服务 SLS,月写入数据量 50GB 1个月
简介: 如何安装和管理 Supervisor

简介

在许多 VPS 环境中,通常会有一些小型程序需要持续运行,无论是小型 shell 脚本、Node.js 应用程序还是任何大型软件包。

通常,外部软件包都会提供一个 单元文件,允许它们由像 systemd 这样的 init 系统进行管理,或者打包为可以由容器引擎管理的 Docker 镜像。然而,对于未经良好打包的软件,或者对于不希望在服务器上与低级别 init 系统进行交互的用户来说,拥有一个轻量级的替代方案是很有帮助的。

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

先决条件

要完成本指南,您需要:

  • 一个 Linux 服务器和一个具有 sudo 权限的非根用户。您可以在我们的《在 Ubuntu 20.04 上进行初始服务器设置》指南中了解如何设置具有这些权限的用户。

步骤 1 - 安装

首先更新软件包源并安装 Supervisor:

sudo apt update && sudo apt install supervisor

安装完成后,Supervisor 服务会自动运行。您可以检查其状态:

sudo systemctl status supervisor

您应该会收到以下输出:

● supervisor.service - Supervisor process control system for UNIX
     Loaded: loaded (/lib/systemd/system/supervisor.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2021-11-17 22:56:48 UTC; 5min ago

现在我们已经安装了 Supervisor,可以开始添加我们的第一个程序。

步骤 2 - 添加程序

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

为了演示 Supervisor 的功能,我们将创建一个什么都不做,只是每秒产生一些可预测输出的 shell 脚本,并且会持续在后台运行,直到手动停止。使用 nano 或您喜欢的文本编辑器,在您的主目录中打开一个名为 idle.sh 的文件:

nano ~/idle.sh

添加以下内容:

#!/bin/bash
while true
do 
  # Echo current date to stdout
  echo `date`
  # Echo 'error!' to stderr
  echo 'error!' >&2
  sleep 1
done

保存并关闭文件。如果您使用的是 nano,按 Ctrl+X,然后在提示时按 Y 和 Enter。

接下来,使您的脚本可执行:

chmod +x ~/idle.sh

Supervisor 程序的每个程序配置文件位于 /etc/supervisor/conf.d 目录中,通常每个文件运行一个程序,并以 .conf 结尾。我们将为此脚本创建一个配置文件,即 /etc/supervisor/conf.d/idle.conf

sudo nano /etc/supervisor/conf.d/idle.conf

添加以下内容:

command=/home/ubuntu/idle.sh
autostart=true
autorestart=true
stderr_logfile=/var/log/idle.err.log
stdout_logfile=/var/log/idle.out.log

我们逐行来看:

command=/home/ubuntu/idle.sh

配置从定义一个名为 idle 的程序和程序的完整路径开始:

autostart=true
autorestart=true

接下来的两行定义了脚本在特定条件下的自动行为。

autostart 选项告诉 Supervisor 在系统启动时应启动此程序。将其设置为 false 将需要在任何系统关闭后手动启动。

autorestart 定义了 Supervisor 在程序退出时应如何管理程序:

  • false 告诉 Supervisor 在程序退出后不要重新启动程序。
  • true 告诉 Supervisor 在程序退出后始终重新启动程序。
  • unexpected 告诉 Supervisor 仅在程序以意外错误代码退出时(默认情况下为除代码 0 或 2 之外的任何代码)重新启动程序。要了解更多关于错误代码的信息,请查看 errno 命令。
stderr_logfile=/var/log/idle.err.log
stdout_logfile=/var/log/idle.out.log

最后两行定义了程序的两个主要日志文件的位置。如选项名称所示,stdout 和 stderr 将分别定向到 stdout_logfilestderr_logfile 位置。指定的目录必须已经存在,因为 Supervisor 不会尝试创建任何缺失的目录。

我们在这里创建的配置是 Supervisor 程序的一个最小模板。Supervisor 文档列出了许多可用于调整程序运行方式的可选配置选项。

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

sudo supervisorctl reread
idle: available

然后告诉它执行任何更改:

sudo supervisorctl update
idle: added process group

每当您对任何程序配置文件进行更改时,运行上述两个命令将使更改生效。

此时,我们的程序现在应该正在运行。我们可以通过查看输出日志文件来检查其输出:

sudo tail /var/log/idle.out.log
Sat Nov 20 22:21:22 UTC 2021
Sat Nov 20 22:21:23 UTC 2021
Sat Nov 20 22:21:24 UTC 2021
Sat Nov 20 22:21:25 UTC 2021
Sat Nov 20 22:21:26 UTC 2021
Sat Nov 20 22:21:27 UTC 2021
Sat Nov 20 22:21:28 UTC 2021
Sat Nov 20 22:21:29 UTC 2021
Sat Nov 20 22:21:30 UTC 2021
Sat Nov 20 22:21:31 UTC 2021

接下来,我们将介绍 Supervisor 的一些其他用法。

步骤 3 - 管理程序

除了运行程序外,您可能还希望停止、重新启动或查看它们的状态。我们在步骤 2中使用的 supervisorctl 程序还有一个交互模式,我们可以使用它来控制我们的程序。

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

sudo supervisorctl
idle                      RUNNING    pid 12614, uptime 1:49:37
supervisor>

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

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

您可以使用相关命令后跟程序名称来 startstop 一个程序:

supervisor> stop idle
idle: stopped
supervisor> start idle
idle: started

使用 tail 命令,您可以查看程序的标准输出和标准错误日志中的最近条目:

supervisor> tail idle
Sun Nov 21 00:36:10 UTC 2021
Sun Nov 21 00:36:11 UTC 2021
Sun Nov 21 00:36:12 UTC 2021
Sun Nov 21 00:36:13 UTC 2021
Sun Nov 21 00:36:14 UTC 2021
Sun Nov 21 00:36:15 UTC 2021
Sun Nov 21 00:36:17 UTC 2021
supervisor> tail idle stderr
error!
error!
error!
error!
error!
error!
error!

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

supervisor> status
idle                      STOPPED    Nov 21 01:07 AM

最后,您可以通过 Ctrl+C 退出 supervisorctl,或者在提示符中输入 quit

supervisor> quit

结论

在本教程中,您学会了如何安装和管理 Supervisor。正如提到的那样,按照现代标准,Supervisor 非常轻量级,但它仍在得到良好的维护,并且可以成为较小部署的有用工具。它还是一种低维护和自包含的生成日志的方式,作为较大部署的组成部分。

如果您运行多个需要通过 Web 访问的小型应用程序,您可能还想阅读有关配置 Nginx 作为反向代理的信息,这是另一个小型、可重用部署的基本组件。


相关实践学习
日志服务之使用Nginx模式采集日志
本文介绍如何通过日志服务控制台创建Nginx模式的Logtail配置快速采集Nginx日志并进行多维度分析。
目录
相关文章
|
监控 程序员 Linux
supervisor的正确离线安装和使用
supervisor的正确离线安装和使用
378 0
|
4月前
|
网络协议 Unix 应用服务中间件
Supervisor安装与配置
Supervisor安装与配置
|
7月前
|
监控 应用服务中间件 nginx
Supervisor快速入门 | 使用Supervisor守护Nginx进程
Supervisor快速入门 | 使用Supervisor守护Nginx进程
210 0
|
监控 Ubuntu Python
Supervisor离线安装及使用
Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。它是通过fork/exec的方式把这些被管理的进程当作supervisor的子进程来启动,这样只要在supervisor的配置文件中,把要管理的进程的可执行文件的路径写进去即可。也实现当子进程挂掉的时候,父进程可以准确获取子进程挂掉的信息的,可以选择是否自己启动和报警
205 0
|
监控 Unix 程序员
正确离线安装supervisor
supervisor是一个用python语言编写的进程管理工具,它可以很方便的监听、启动、停止、重启一个或多个进程。当一个进程意外被杀死,supervisor监听到进程死后,可以很方便的让进程自动恢复,不再需要程序员或系统管理员自己编写代码来控制。
525 0
supervisor 安装、配置、使用
supervisor 安装、配置、使用
753 0
|
JavaScript
supervisor安装
supervisor安装
122 0
|
监控 安全 Java
使用supervisor管理你的程序
Supervisor是python开发的一种进程管理工具。不仅可以监控我们的程序还可以自动重启我们的程序,非常好用。
215 1
使用supervisor管理你的程序
|
jenkins 持续交付
jenkins通过supervisor配置守护进程
jenkins通过supervisor配置守护进程
232 0
下一篇
DataWorks