【技术栈——00046】supervisor进程管理工具,详细的部署gunicorn和flask部署步骤。

配置

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

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.sh
directory=/home/tanzhihao/3dview_remote
user=root
autorestart=true
redirect_stderr=false
loglevel=info
stopsignal=KILL
stopasgroup=true
killasgroup=true

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

cd script

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

在这里插入图片描述

#! /bin/bash
source ~/.bashrc
export FLASK_ENV=production
cd /home/tanzhihao/3dview_remote
exec 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.sock

find / -name supervisor.sock
unlink /***/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

# 端口 5000
bind = '127.0.0.1:5000'

# 设置守护进程,将进程交给supervisor管理
daemon = 'false'

# 工作模式协程
worker_class = 'gevent'

# 设置最大并发量
worker_connections = 2000

# 设置进程文件目录
pidfile = '/var/run/gunicorn.pid'

# 设置访问日志和错误信息日志路径
accesslog = "/home/hao/3w_remote/gunlog/access.log"
errorlog = "/home/hao/3w_remote/gunlog/error.log"
loglevel = "debug"

# 设置日志记录水平
loglevel = 'warning'

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

#! /bin/bash
source ~/.bashrc
export FLASK_ENV=production
cd /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/3ipt.sh
directory=/home/hao/3w_remote
user=root
autorestart=true
redirect_stderr=false
loglevel=info
stopsignal=KILL
stopasgroup=true
killasgroup=true
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值