SuperVisor安装与实践

闲话

最近经常会遇到需要将一些任务长期运行的场景,需要令一些后台进程常驻。手上的开发机虽然启动方便,但是毕竟网络环境不稳定,经常需要花精力去维护。正巧手边有一台闲置的主机,就直接装了个linux用来跑各种东西。家里云

问题

我的目的是跑一个python脚本,并且伴随机器启动时自动启动。在linux的众多进程托管工具中,结合普遍性,考虑了systemd以及supervisor。之后又经过了一系列横向对比,还是决定使用supervisor来处理。

  1. Systemd配置相比supervisor更加复杂,不易上手
  2. supervior存在着进程组的管理,可以对多个进程统一管理

由于是自己个人用的东西,性能占用也并不高,所以对于性能并没有做过多考量。

环境

操作系统: Ubuntu LTS 22.04

系统架构: x86_64

配置用户: root

安装

首先需要安装supervisor, 其为python编写的程序,可通过以下方式安装

1
2
3
4
# 安装supervisor
apt install supervisor
# 设置supervisord服务开机自启
systemctl enable supervisor

此时supervisor便安装完成,如果无法install,需自行更换apt镜像源

指令

supervisor有如下指令可使用

  • supervisorctl:进入命令行交互界面,可直接输入子命令进行管理。
  • supervisorctl reload:重新加载配置文件,并重启supervisord及所有自动启动的程序。
  • supervisorctl restart {PROGRAM< ...>}|all:重启程序,all表示重启所有程序。
  • supervisorctl start {PROGRAM< ...>}|all:启动程序,all表示启动所有程序。
  • supervisorctl status <{PROGRAM< ...>}|all>:查看程序状态,如为all或不指定则查看所有程序状态。
  • supervisorctl stop {PROGRAM< ...>}|all:停止程序,all表示停止所有程序。
  • supervisorctl update:重新加载配置文件,并启动新配置指定的程序。

配置

安装好后,便可以进行任务的配置,supervisor的任务的配置文件都位于:/etc/supervisor/conf.d/

任务的配置文件应为: <task-name>.conf

此处我使用自己的脚本配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
[program:week-bot] # program:[name] 指定该任务的名称为week-bot
# 自动重启
autorestart=True
# 自动启动
autostart=True
# 标准err输出重定向
redirect_stderr=True

# === 启动细节 ===

# 环境变量,此处指定了python运行的conda环境
environment=CONDA_PREFIX="/home/aim/anaconda3/envs/common39"
# 启动指令
command=python -u robot_new.py
# 以指定用户启动
user=aim
# 工作目录
directory=/home/aim/Documents/week_bot

# === 日志配置 ===
# 日志最大大小
stdout_logfile_maxbytes = 20MB
# 日志的存档数量
stdout_logfile_backups = 20
# 指定标准输出日志文件
stdout_logfile=/home/aim/Documents/week_bot/log/info.log
# 指定标准错误日志文件
stderr_logfile=/home/aim/Documents/week_bot/log/error.log
**注: 此处logfile配置的文件夹需存在**

启动

保存好改配置文件后,即可启动服务,执行:

1
2
3
4
# 刷新任务配置
supervisorctl reread
# 启动
supervisorctl start week-bot

服务正常启动,日志正常写入,配置完成。