如何在 Ubuntu 上安装和配置 Supervisor
source link: https://blog.p2hp.com/archives/8582
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
如何在 Ubuntu 上安装和配置 Supervisor
如何在 Ubuntu 上安装和配置 Supervisor
在许多服务器环境中,通常情况下,您将拥有许多要持久运行的小程序,无论这些程序是小型shell脚本,Node.js应用程序还是任何大型软件包。
通常,外部包随单元文件一起提供,允许它们由 init 系统(如 systemd)管理,或者打包为可由容器引擎管理的 docker 映像。但是,对于未很好地打包的软件,或者对于不希望与服务器上的低级 init 系统交互的用户,拥有轻量级替代方案是有帮助的。
Supervisor是一个进程管理器,它提供了一个单一的界面来管理和监视许多长时间运行的程序。在本教程中,您将在 Linux 服务器上安装 Supervisor,并学习如何管理多个应用程序的 Supervisor 配置。
以下是 Supervisor 的主要优势:
- 方便:为所有单流程实例编写 rc.d 很不方便。同样,Rc.d 脚本不会自动重新启动崩溃的进程。但是,可以将 Supervisor 配置为在进程崩溃时自动重启进程。
- 准确性: 在 UNIX 中,通常很难获得进程的准确启动/停止状态。Supervisor 将进程作为子进程启动,因此它知道其子进程的 up/down 状态。这很容易为最终用户查询。
第 1 步 - 安装
首先更新你的包源并安装Supervisor:
$ sudo apt update && sudo apt install supervisor
- $ sudo apt update && sudo apt install supervisor
$ sudo apt update && sudo apt install supervisor
Supervisor服务在安装后自动运行。您可以检查其状态:
$ sudo systemctl status supervisor
$ sudo systemctl status supervisor
Output ● 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
- Output
- ● 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
Output ● 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,那么你可能需要查阅程序的手册来找到启用此模式的选项,否则 Supervisor 将无法正确确定程序的状态。
为了演示 Supervisor 的功能,我们将创建一个 shell 脚本,该脚本除了每秒生成一些可预测的输出外,什么都不做,但将在后台连续运行,直到手动停止。使用 nano
或您喜欢的文本编辑器,在主目录中打开一个名为 idle.sh
的文件:
$ nano ~/idle.sh
- $ 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
- #!/bin/bash
- while true
- # Echo current date to stdout
- echo `date`
- # Echo 'error!' to stderr
- echo 'error!' >&2
- sleep 1
#!/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
- $ chmod +x ~/idle.sh
$ chmod +x ~/idle.sh
Supervisor程序的每个程序配置文件位于 /etc/supervisor/conf.d
目录中,通常每个文件运行一个程序,并以 .conf
结尾。我们将为此脚本创建一个配置文件,as'/etc/supervisor/conf.d/idle.conf:
$ sudo nano /etc/supervisor/conf.d/idle.conf
- $ sudo nano /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
- autostart=true
- autorestart=true
- stderr_logfile=/var/log/idle.err.log
- stdout_logfile=/var/log/idle.out.log
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_logfile
和stderr_logfile
位置。 指定的目录必须已经存在,因为 Supervisor 不会尝试创建任何缺失的目录。 我们在此处创建的配置是 Supervisor 程序的最小模板。
列出了更多可选配置选项,可用于调整程序的运行方式。 创建并保存配置文件后,我们可以通过supervisorctl
命令通知 Supervisor 我们的新程序。 首先,我们告诉 Supervisor 在/etc/supervisor/conf.d
目录中查找任何新的或已更改的程序配置:sudo supervisorctl reread Output idle: available
然后告诉它通过以下方式进行任何更改:sudo supervisorctl update Output
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
Output
idle RUNNING pid 12614, uptime 1:49:37
supervisor>
supervisorctl
最初将打印所有已配置程序的状态和正常运行时间,然后是其命令提示符。输入help
将显示其所有可用命令:
supervisor> help
Output
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
您可以使用关联的命令后跟程序名称来start
or stop
程序:
supervisor> stop idle
Output
idle: stopped
supervisor> start idle
Output
idle: started
使用该tail
命令,您可以查看程序的 stdout 和 stderr 日志中的最新条目:
supervisor> tail idle Output 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 Output error! error! error! error! error! error! error!
使用status
您可以在进行任何更改后再次查看每个程序的当前执行状态:supervisor> status Output idle STOPPED Nov 21 01:07 AM
最后,您可以使用 Ctrl+C 或输入quit
提示符退出 supervisorctl:supervisor> quit
第 4 步 - 启用 Supervisor Web 界面
Supervisor 提供了一个基于 Web 的界面来管理所有进程,但默认情况下它是禁用的。您可以通过编辑文件 /etc/supervisor/supervisord.conf 来启用它:
nano /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 界面:
在本教程中,您学习了如何安装和管理 Supervisor。如前所述,按照现代标准,Supervisor 是非常轻量级的,但它仍然得到很好的维护,它可以成为小型部署的有用工具。作为大型部署的组成部分,它也是一种低维护且独立的方式来生成日志。
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK