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.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