myfreax

如何使用supervisor管理进程

Supervisor是一个C/S架构的软件,允许其用户在类UNIX操作系统上控制多个进程,类似与systemd,但没有systemd那么强大,由supervisord作为服务端,supervisorctl提供CLI方式进行管理,提供Web Server服务组建进行远程管理和验证

3 min read
By myfreax
如何使用supervisor管理进程

Supervisor是一个C/S架构的软件,允许其用户在类UNIX操作系统上控制多个进程,类似与systemd,但没有systemd那么强大,由supervisord作为服务端,supervisorctl提供CLI方式进行管理,提供Web Server服务组建进行远程管理和验证。

在本教程中,我们将如何说明如何使用supervisor管理进程。

安装Supervisor

Debian/Ubuntu

➜ sudo apt-get install supervisor 

RedHat/Fedora

➜ yum install python-simplevisor.noarch supervisor

配置说明

配置远程管理http_server

; http server config
[inet_http_server]
port=127.0.0.1:9001 

自定义进程配置文件con.d/user.conf

[program:x]
- process_name 为进程命令添加描述
- numprocs 当supervisord启动时,启动进程数,默认是1,
- numprocs_start 进程数值的偏移量,如果启动15个,偏移量为10,那么进程数将会是10-25
- priority 定义进程启动和停止的优先级别,高优先级别的程序会在最后被启动,首先被关闭,Default: 999
- autostart 如果设置为true,当supervisord启动时进程将会被启动
- startsecs 进程启动多少秒后才从STARTING过渡到RUNING状态,默认是1秒
- startretries 经过多少次尝试启动失败后过度到FATAL状态
- autorestart 自动重启,值可以是true(如果设置true则为无条件重启),unexpected(只要不再exitcode定义的代码都重启),false(不会自动重启),true,如果是unexpected
- exitcodes 定义exitcode
- stopwaitsecs 停止等待秒数,超过时间后supervisord将会杀死该进程
- stopasgroup 向组发送停止信号
- killasgroup 向组发送终止信号
- user=chrism 指定用户启动该进程
- redirect_stderr=false 如果设置为true,相当与*Unix系统终端的/the/program 2>&1
- stdout_logfile=/a/path 标准输出的日志文件
- stdout_logfile_maxbytes=1MB 日志文件最大值,超过这个值将会新建文件保存
stdout_logfile_backups=10 备份标准输出日志文件
environment=A="1",B="2" 定义环境变量

进程状态

STOPPED (0)

进程请求停止或者已经处于停止状态
The process has been stopped due to a stop request or has never been started.

STARTING (10)

进程处于启动期间

RUNNING (20)

进程正在运行

BACKOFF (30)

The process entered the STARTING state but subsequently exited too quickly to move to the RUNNING state.
进程已进入正在启动状态但是变为正在运行状态时很快就退出

STOPPING (40)

The process is stopping due to a stop request.
进程处于正在停止的状态

EXITED (100)

The process exited from the RUNNING state (expectedly or unexpectedly).
进程从正在运行的状态转到退出状态,是在预期或者意料之中的

FATAL (200)

The process could not be started successfully.
进程没有被启动成功

UNKNOWN (1000)

进程在未知的状态,supervisord服务程序报错

process-transitions

以下进程状态过渡需要用户手动调用

FATAL -> STARTING

RUNNING -> STOPPING