博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
supervisor进程管理工具,详细的部署gunicorn和flask部署步骤。
阅读量:520 次
发布时间:2019-03-07

本文共 4715 字,大约阅读时间需要 15 分钟。

supervisor

配置

进程的管理工具,监控服务器状态,遇到问题会自动重启。

1:sudo pip install supervisor # 用python2安装

2:echo_supervisord_conf > supervisord.conf # 执行这个命令,在当前文件夹下生成supervisor的配置文件
3:vim supervisord.conf # 编辑生成的supervisor配置文件,把下面的代码加到文件最下面。

[include]files = /etc/supervisor/*.conf

4:cp supervisord.conf /etc # 把生成的配置文件cp到etc下

5:mkdir /etc/supervisor # 创建这个文件夹,用来储存要supervisor要管理的项目和执行脚本。 (第三步指定过)

6:cd /etc/supervisor
touch 项目名.conf
# 创建一个项目的配置文件,加入以下内容(要复制代码在图片下面,指定的两个路径要改成自己的)

在这里插入图片描述

[group:backend]programs=3dvserver[program:3dvserver]command=/etc/supervisor/scripts/3dv_script.shdirectory=/home/tanzhihao/3dview_remoteuser=rootautorestart=trueredirect_stderr=falseloglevel=infostopsignal=KILLstopasgroup=truekillasgroup=true

7:mkdir script # 用来存放要执行的脚本

cd script

8: touch 脚本文件名.sh # 用来执行的脚本,并编辑加入以下内容

在这里插入图片描述

#! /bin/bashsource ~/.bashrcexport FLASK_ENV=productioncd /home/tanzhihao/3dview_remoteexec gunicorn -w 2 -b 127.0.0.1:5005 manage:app

9:chmod 777 脚本文件名.sh # 给这个文件加执行权限,只加x也可。

10:supervisord -c /etc/supervisord.conf # 启动supervisor
11: supervisorctl # 进入supervisor管理进程

相关命令

status # 查看程序状态,会显示你布置好的程序名
start 程序名称 # 启动程序
stop 程序名称
命令很多可以网上查下,这俩常用.

Bugs,以及一些使用心得.

B1: unix:///var/run/supervisor/supervisor.sock refused connection问题

supervisord -c /etc/supervisord.conf 启动supervisord并使用配置

注意这个命令有时候会启动多个supervisor进程,保证启动一个就可以.

B2:“unix:///tmp/supervisor.sock no such file”

unix:///tmp/supervisor.sock no such file 原因是 supervisor 默认配置会把 socket

文件和 pid 守护进程生成在/tmp/目录下,/tmp/目录是缓存目录,Linux 会根据不同情况自动删除其下面的文件。
原因找到了,就好办了,将 supervisor 配置文件里的相应地方改掉就好了。

2、修改如下: vi /etc/supervisord.conf [unix_http_server]

;file=/tmp/supervisor.sock ; (the path to the socket file)
file=/var/run/supervisor.sock ; 修改为 /var/run 目录,避免被系统删除

[supervisord] ;logfile=/tmp/supervisord.log ; (main log file;default

$CWD/supervisord.log) logfile=/var/log/supervisor/supervisord.log ;
修改为 /var/log 目录,避免被系统删除 pidfile=/var/run/supervisord.pid ; 修改为
/var/run 目录,避免被系统删除 …

[supervisorctl] ; 必须和’unix_http_server’里面的设定匹配

;serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL for a unix
socket serverurl=unix:///var/run/supervisor.sock ; 修改为 /var/run
目录,避免被系统删除 3、更新配置文件 supervisorctl update 至此就可以了,socket 文件
supervisor.sock 和守护进程 supervisord.pid 两个文件放在/var/run/下面,log 文件
supervisord.log 放在/var/log/下面。

B3:解决supervisor中unix:///tmp/supervisor.sock no such file的问题 另一种解决方案

原因:tmp文件夹属于linux的缓存文件夹,会被定期清除 1、打开配置文件

vim /etc/supervisord.conf 1 这里把所有的/tmp路径改掉,/tmp/supervisor.sock 改成

/var/run/supervisor.sock,/tmp/supervisord.log 改成
/var/log/supervisor.log,/tmp/supervisord.pid 改成
/var/run/supervisor.pid 要不容易被linux自动清掉
日志文件可以放在tmp文件夹下,问题不大,但是需要移动pid,sock这种后缀文件到其他文件夹,不一定需要/var/run这个文件夹,
2、修改权限(一般情况可不用修改)

sudo chmod 777 /run sudo chmod 777 /var/log 1 2 如果没改,启动报错 IOError:

[Errno 13] Permission denied: ‘/var/log/supervisord.log’

3、创建supervisor.sock(个人没有创建也可以正常启动)

sudo touch /var/run/supervisor.sock sudo chmod 777

/var/run/supervisor.sock 1 2 4、启动supervisord,注意stop之前的实例或杀死进程

supervisord -c /etc/supervisor/supervisord.conf

启动supervisor,如果配置文件有错会报错 配置文件为/etcsupervisor/supervisor.conf
和conf.d文件里面的配置 然后执行 supervisorctl reload 重新加载配置

supervisorctl status:查看所有进程的状态 supervisorctl stop

beanstalk:停止beanstalk supervisorctl start es:启动beanstalk supervisorctl
restart beanstalk: 重启beanstalk supervisorctl update
:配置文件修改后可以使用该命令加载新的配置 supervisorctl reload: 重新启动配置中的所有程序 1 2 3 4 5 6
总结:安装supervisor时候又遇到很奇怪的问题,可以直接找到pid然后kill,或者直接pkill supervisord

B4:Supervisorctl错误Unlinking stale socket /var/run/supervisor.sock

错误解决办法:A:Starting supervisor: Unlinking stale socket /var/run/supervisor.sockfind / -name supervisor.sockunlink /***/supervisor.sock

B5:进入supervisorctl里后,用status查看,任务一直starting状态,或者一直自己重启

那就查看一下,必须保证全部杀死.

ps aux | grep supervisor
ps aux | grep gunicorn

以下gunicorn用配置文件的方式启动

在manage.py所在目录创建gunicorn.conf,增加以下内容

import multiprocessing#预加载资源preload_app = True# 并行工作进程数workers = 2# 指定每个工作者的线程数threads = 2# 端口 5000bind = '127.0.0.1:5000'# 设置守护进程,将进程交给supervisor管理daemon = 'false'# 工作模式协程worker_class = 'gevent'# 设置最大并发量worker_connections = 2000# 设置进程文件目录pidfile = '/var/run/gunicorn.pid'# 设置访问日志和错误信息日志路径accesslog = "/home/tanzhihao/3dview_remote/gunlog/access.log"errorlog = "/home/tanzhihao/3dview_remote/gunlog/error.log"loglevel = "debug"# 设置日志记录水平loglevel = 'warning'

/etc/supervisor/scripts里的内容如下

#! /bin/bashsource ~/.bashrcexport FLASK_ENV=productioncd /home/tanzhihao/3dview_remote#exec gunicorn -w 2 -b 127.0.0.1:5005 -k 'gevent' manage:app# -c 指定gunicorn配置文件exec gunicorn -c gunicorn.conf manage:app

supervisor的配置文件没有变化,内容如下

[group:backend]programs=3dvserver[program:3dvserver]command=/etc/supervisor/scripts/3dv_script.shdirectory=/home/tanzhihao/3dview_remoteuser=rootautorestart=trueredirect_stderr=falseloglevel=infostopsignal=KILLstopasgroup=truekillasgroup=true

转载地址:http://xyvnz.baihongyu.com/

你可能感兴趣的文章