Supervisord配置生成

在线Supervisord配置文件生成工具,可视化填写程序名称、启动命令、工作目录、运行用户、自动启动/重启、停止信号、日志路径与滚动、环境变量等参数,一键生成符合Supervisor规范的[program:xxx]节ini配置文件,支持复制与下载。

基础配置
启动与重启设置
是 (随supervisor启动)
从不 异常退出时 始终重启
日志设置
环境变量 (environment)
生成的配置预览
[program:xxx] ini 配置

功能特性

一键生成

可视化填写参数,自动生成符合 Supervisor 规范的 [program:xxx] 节 ini 配置,无需手写配置文件。

参数齐全

覆盖启动命令、工作目录、运行用户、自动启动/重启、启动等待、停止信号、日志滚动、环境变量等常用参数。

日志管理

独立设置 stdout 和 stderr 日志路径、单文件最大大小(maxbytes)和备份数量(backups),避免日志爆盘。

环境变量

动态增删环境变量行,自动转义包含逗号、空格、引号等特殊字符的值,确保 environment 行语法正确。

复制便捷

生成结果支持一键复制到剪贴板,也可直接下载为 .ini 文件,快速部署到 /etc/supervisor/conf.d/ 目录。

默认合理

提供 industry 常用默认值(autostart=true、autorestart=unexpected、startsecs=10、stopasgroup=true 等),开箱即用。

使用说明

生成配置步骤

  • 基础配置:填写程序名称([program:xxx] 中的 xxx)和启动命令,可选填工作目录和运行用户。
  • 启动设置:设置是否自动启动、自动重启策略、启动等待秒数和停止信号。
  • 日志设置:分别配置 stdout 和 stderr 的日志路径、单文件大小上限和备份数量。
  • 环境变量:点击「添加环境变量」动态增删 KEY/VALUE 行,适用于传递 ASPNETCORE_ENVIRONMENT 等参数。
  • 生成与下载:点击「生成配置」按钮在下方预览区查看 ini 内容,一键复制或下载为 .ini 文件。

部署到 Supervisor

  • 将生成的 .ini 文件放到 /etc/supervisor/conf.d/ 目录(CentOS/Debian/Ubuntu 常见路径)。
  • 确认日志目录存在,例如 sudo mkdir -p /var/log/supervisor
  • 执行 sudo supervisorctl reread 重新读取配置,然后 sudo supervisorctl update 生效。
  • 使用 sudo supervisorctl status 查看进程状态,sudo supervisorctl start/stop/restart {name} 管理进程。
  • 若修改配置,使用 sudo supervisorctl reload 重新加载整个配置文件。

典型场景

  • .NET / .NET Core 应用:command = dotnet MyApp.dll --urls=http://0.0.0.0:5000,directory 设为发布目录。
  • Python 服务:command = /usr/bin/python3 /opt/app/main.py,user 设为非 root 用户提升安全。
  • Node.js 应用:command = /usr/bin/node /opt/server.js,环境变量设置 NODE_ENV=production。
  • Java Jar 包:command = /usr/bin/java -Xmx512m -jar /opt/app.jar --server.port=8080
  • Go 二进制程序:command = /opt/mygoapp -c /opt/config.yaml,配合日志滚动避免磁盘爆满。

常见问题

如何在 Ubuntu/Debian 上安装 Supervisor?
使用 apt 包管理器安装:sudo apt update && sudo apt install -y supervisor。安装完成后,Supervisor 会自动作为 systemd 服务启动(systemctl status supervisor 查看)。配置文件主路径为 /etc/supervisor/supervisord.conf,用户自定义配置通常放在 /etc/supervisor/conf.d/*.conf(或 *.ini)目录。
如何在 CentOS/RHEL 上安装 Supervisor?
先启用 EPEL 源:sudo yum install -y epel-release,然后安装:sudo yum install -y supervisor。启动并设置开机自启:sudo systemctl enable --now supervisord。CentOS 的配置目录通常为 /etc/supervisord.d/*.ini,主配置文件为 /etc/supervisord.conf
Supervisor 的配置文件路径有哪些?
全局主配置一般位于 /etc/supervisor/supervisord.conf(Debian/Ubuntu)或 /etc/supervisord.conf(CentOS)。用户自定义 program 配置推荐放在 include 目录:Debian/Ubuntu 为 /etc/supervisor/conf.d/*.conf*.ini;CentOS/RHEL 为 /etc/supervisord.d/*.ini。具体路径可以查看主配置文件末尾的 [include] files = ... 段落。
修改配置后如何让 Supervisor 生效?
最常用的命令:
sudo supervisorctl reread:只扫描配置文件变更,不重启进程。
sudo supervisorctl update:根据 reread 的结果启动/停止受影响的进程。
sudo supervisorctl reload:重启 supervisord 主进程并重新加载所有配置(注意会短暂影响所有被管理的程序)。
一般推荐先用 reread + update,仅当全局配置变更时才用 reload
autorestart 三个值的区别是什么?
autorestart=false:无论程序如何退出都不自动重启。
autorestart=unexpected(推荐默认):仅当程序以非预期退出码(不是 0、2)退出时才重启,避免代码写错无限循环重启。
autorestart=true:无论任何原因退出都自动重启,适用于必须 7x24 在线的核心服务,但要防止配置错误导致的"死亡循环重启"。可以通过 startretries 限制重试次数。
为什么进程停止后子进程还在运行?
这是因为 Supervisor 默认只停止主进程(PID 1),不会主动递归清理其子进程。解决方法:在配置中加上 stopasgroup=truekillasgroup=true(本工具已默认包含),这样停止信号会发送给整个进程组,超时未退出则使用 SIGKILL 清理整个进程组,避免僵尸进程和孤儿端口占用。
如何查看被管理进程的实时日志?
方法一:直接 tail 本工具生成的日志路径,如 tail -f /var/log/supervisor/myapp_stdout.logmyapp_stderr.log
方法二:使用 supervisorctl 自带命令:sudo supervisorctl tail -f myapp stdout(或 stderr)。
方法三:查看最近若干行:sudo supervisorctl tail -200 myapp
如果日志量巨大,建议使用 ELK/EFK 或 Loki 等集中日志系统采集。
环境变量中含有逗号、空格、引号怎么办?
Supervisor 的 environment= 行使用逗号分隔多个变量,变量值中含逗号、空格、引号等特殊字符时必须用双引号包裹,并将反斜杠和双引号转义。本工具会自动识别并处理这类值:例如 VALUE 为 hello,world "a" 会被转义输出为 KEY="hello,world \"a\"",直接生成正确的 ini 行。