最近部署网站,发现supervisor这个包非常好用,但是也有一些小坑,这边写一些必要步骤,帮助有需要的朋友把。
pip install supervisor
apt-get install supervisor
因为我用的Ubuntu,也装了Python环境,所以两条命令都可以用,大家酌情安装
这种配置文件一般都放到/etc里,所以在/etc里创建一个supervisor的文件夹吧
cd /etc
mkdir supervisor #创建supervisor目录
cd /etc/supervisor
echo_supervisord_conf > /etc/supervisor/supervisord.conf #生成配置文件
mkdir conf.d #生成放置具体配置文件的目录
进入到/etc/supervisor 这个目录,可以看到一个supervisord.conf的文件,这就说明已经说明生成配置文件成功了!
打开supervisord.conf这个文件,可以直接ftp,vim也行,基本啥也不用改,直接拉到最底下,增加两行代码
[include]
files = /etc/supervisor/conf.d/*.ini
顾名思义,会把conf.d里所有的ini文件都加载作为配置文件
拓展:
可以看到supervisord.conf这个文件下有许许多多的配置,还有很多前面加了;符号,这些是注释了的,去掉;就可以生效,比如想加个用户名密码啥的…
配置文件也在里头写清楚了默认在这个位置
[supervisord]
logfile=/tmp/supervisord.log ; main log file; default $CWD/supervisord.log
具体配置:
进入到conf.d里加ini文件,随便命名就行
mkdir /etc/supervisor/conf.d/helloWord.ini #随便命名生成配置文件
然后编辑helloWord.ini文件,这边我给出三个配置示例
[program:redis] #命名,会在一会启动中显示
command=/usr/bin/redis-server #命令语句 (找不到命令的文件夹用whereis查一下就好了)
autostart=true #自动启动
autorestart=true #自动重启
startsecs=3 #启动时间
[program:uwsgi]
command=/usr/local/bin/uwsgi --ini /home/project_uwsgi/uwsgi.ini #(ini后显示uwsgi的ini文件位置)
startsecs=5
autostart=true
autorestart=true
stdout_logfile=/home/supervisor_log/uwsgi.log #(该进程日志文件存贮的位置)
stderr_logfile=/home/supervisor_log/uwsgi.log
[program:asgi]
socket=tcp://localhost:8000
directory=/home/project/
command=/home/project_env/bin/daphne -p 8000 project.asgi:application #这个例子主要展示虚拟环境下启动
# Number of processes to startup, roughly the number of CPUs you have #需要到虚拟环境所在位置发送命令
numprocs=1
startsecs=5
autostart=true
autorestart=true
stdout_logfile=/home/supervisor_log/asgi.log
redirect_stderr=true
supervisord #初始启动
supervisorctl #进入交互式(如果设置秘密,到这一步会出现提示要输入密码)
>update #更新conf配置文件
>status #查看状态
>reread #每次重写配置后需要先重新读取
>update #重新读取后也需要更新配置文件
>status #查看状态
>restart #重启进程(后面跟进程名称)
restart asgi
restart all(重启所有进程)
>stop #停止进程(后面跟进程名称)
>start #启动进程(后面跟进程名称)
单个进程错误,请看单个进程的 日志;supervisor错误看supervisor的日志,好像和没说一样..
其实最常见的错误是守护进程导致的!例如nginx,uwsgi,redis;这些基本都有守护进程,简单来说就是他们都是会自动重启的,你不能通过supervisor来开关,这个就很烦了。
要解决也很简单,找到对应的配置文件,注释掉守护进程就行了,这个配置的特征是“daemon ”
daemon off #关闭守护进程
这样就可以了。
supervisor本身不是很难,目前基本没再碰到坑了(守护进程这个坑到过),若有再坑,再议!