supervisor 介绍,启动uwsgi失败,端口被占用


# 1. supervisor 介绍
supervisor是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具,不支持Windows系统。它可以很方便的监听、启动、停止、重启一个或多个进程。用Supervisor管理的进程,当一个进程意外被杀死,supervisort监听到进程死后,会自动将它重新拉起,很方便的做到进程自动恢复的功能,不再需要自己写shell脚本来控制。


# 2. 安装
系统环境为: ubuntu 16.04
直接通过apt 安装即可
```shell
root@U-996-web:~# apt install supervisor
```

[↑返回顶部↑](#supervisor)

# 3. 配置文件说明
配置文件,都在 /etc/supervisor/conf.d/下,如果想增加一个新的任务,在此目录下,新建xx.conf 文件,并填写内容即可

```shell
[program:agency_pay_main_api]
directory = /opt/agency/enabled/app/
command = /home/ubuntu/.pyenv/versions/agency/bin/uwsgi -i main_uwsgi.ini
user =root
autorestart = true
redirect_stderr = true
stdout_logfile = /var/log/agency_pay/main_uwsgi.log
stopsignal = QUIT
```

配置项说明:
> program: 任务的名字
> directory:任务执行时,所在目录
> command:任务的启动命令,supervisor 将执行这条命令,来启动任务
> user:以哪个用户来启动任务
> autorestart: 自动重启,当进程挂了之后
> stdout_logfile: 日志文件
> stopsignal: 关闭服务时,向进程发送的信号

[↑返回顶部↑](#supervisor)


# 4. supervisor 进程说明
supervisor  是c/s方式的进程管理工具,
> 后台进程为 supervisord
> 默认启动方式为 /usr/bin/python /usr/bin/supervisord -n -c /etc/supervisor/supervisord.conf
> 直接执行  supervisord 也可以启动

> 前台程序为 supervisorctl
> 通过访问var/run/supervisor.sock,来跟 supervisord 交互(在supervisord.conf 配置文件中有写)

[↑返回顶部↑](#supervisor)

# 5. supervisorctl 指令说明
控制重启停止加载等,都是通过supervisorctl 来输入的
先执行supervisorctl 会进入控制台,之后输入命令即可

```shell
root@U-996-web:~# supervisorctl
常用指令
> status 查看状态
> reload 重新加载配置
> start xxx 启动某个任务
> stop xxx 停止某个任务
> restart xxx 重启某个任务
> start all 启动所有任务
> stop all 停止所有任务
> restart all 重启所有任务
```

[↑返回顶部↑](#supervisor)

# 6. 实战问题:
## 6.1 supervisor 启动 uwsgi 进程失败
现象:实战中使用supervisor 启动uwsgi 网站进程的时候,uwsgi启动多次,导致异常,端口重复绑定的问题(直接uwsgi uwsgi.ini 启动没问题)

问题根源:
uwsgi.ini 中制定了日志输出
> daemonize = /var/log/uwsgi/uwsgi_wechat.log

supervisor 的 .conf 配置文件中,也指定了输出log文件
> stdout_logfile = /var/log/wechat/uwsgi.log

这两个是冲突的
解决办法:
1. 把uwsgi.ini 中的daemonize 日志文件注释掉,如果uwsgi.ini 中有 pidfile = run_uwsgi.pid,也要一并注释掉
2. 有冲突的log文件也要先删除掉
3. 重新加载superver
```shell
root@U-996-web:~# supervisorctl  reload
```

[↑返回顶部↑](#supervisor)

你可能感兴趣的:(ubuntu)