我们在开发python的web服务时,经常会用flask、Django来启动一个服务,但是在部署服务的时候,例如测试服务,我们需要supervisor这样的工具来管理服务进程,方面更新代码时无感知重启项目等
简单的配置进程如下:
安装supervisor
运行 echo_supervisord_conf 查看是否可以使用,可能存在问题
-bash: echo_supervisord_conf: command not found
会因为安装的目录不再PATH,需要把bin目录添加到PATH
vim ~/.bashrc
export PATH="/home/{user}/.local/bin:$PATH"
source ~/.bashrc
运行创建配置文件,
echo_supervisord_conf>/etc/supervisord.conf # /etc 目录
echo_supervisord_conf > supervisord.conf # 如果没有root权限,选择当前项目目录
这里我选择当前目录,vi supervisord.conf, 这点在没有root权限的服务器上非常好使
修改unix_http_server
修改成 ./tmp/supervisor.sock
[supervisord]
logfile=./tmp/supervisord.log ; main log file; default $CWD/supervisord.log
logfile_maxbytes=50MB ; max main logfile bytes b4 rotation; default 50MB
logfile_backups=10 ; # of main logfile backups; 0 means none, default 10
loglevel=info ; log level; default info; others: debug,warn,trace
pidfile=./tmp/supervisord.pid ; supervisord pidfile; default supervisord.pid
后面需要使用 supervisorctl 查看服务状态,所以也需要修改supervisorctl的配置
serverurl=unix://./tmp/supervisor.sock ; use a unix:// URL for a unix socket
include 添加
[include]
files = conf.d/*.conf
创建目录以及文件
mkdir tmp
touch tmp/supervisord.log
touch tmp/supervisord.pid
touch tmp/supervisor.sock
mkdir conf.d
touch conf.d/app.conf, 并配置该文件
[program:your_program_name]
command=python3 app.py
startsecs=0
stopwaitsecs=0
autostart=true
autorestart=true
stdout_logfile=./logs/out.log
stderr_logfile=./logs/err.log
创建logs文件
mkdir logs
touch logs/out.log
touch logs/err.log
现在启动服务
查看进程
使用supervisorctl 查看服务状态
supervisorctl status
结果类似于这样
xxx RUNNING pid 810, uptime 0:07:56