supervisor+daphne+djangochannels

参照官网配置:https://channels.readthedocs.io/en/latest/deploying.htmlhtml

 

1.supervisor

主要是用来管理进程,好比咱们想让一个进程一直执行当前退出时,自动重启python

分为客户端和服务器端laravel

supervisord

服务器主管名为supervisord。它负责在本身的调用中启动子程序,响应来自客户端的命令,从新启动崩溃或退出的子进程,记录其子进程stdout和stderr 输出,以及生成和处理与子进程生命周期中的点相对应的“事件”。

服务器进程使用配置文件。这一般位于/etc/supervisord.conf中。此配置文件是“Windows-INI”样式配置文件。经过适当的文件系统权限保持此文件的安全很是重要,由于它可能包含未加密的用户名和密码。

supervisorctl

主管的命令行客户端部分名为 supervisorctl。它为supervisord提供的功能提供了相似shell的界面。从 supervisorctl,用户能够链接到不一样的 supervisord进程(一次一个),获取由子进程控制的状态,中止和启动子进程,并获取supervisord的运行进程列表。

命令行客户端经过UNIX域套接字或Internet(TCP)套接字与服务器通讯。服务器能够声明客户端的用户在容许他执行命令以前应该提供身份验证凭据。客户端进程一般使用与服务器相同的配置文件,但其中包含[supervisorctl]部分的任何配置文件均可以使用。

 

启动
/usr/local/bin/supervisord -c /etc/supervisord.confshell

 

supervisord,初始启动Supervisord,启动、管理配置中设置的进程。
supervisorctl stop programxxx,中止某一个进程(programxxx),programxxx为[program:chatdemon]里配置的值,这个示例就是chatdemon。
supervisorctl start programxxx,启动某个进程
supervisorctl restart programxxx,重启某个进程
supervisorctl stop all,中止所有进程,注:start、restart、stop都不会载入最新的配置文件。
supervisorctl reload,载入最新的配置文件,并按新的配置启动、管理全部进程。

安全



启动守护进程:supervisord -c /etc/supervisor/supervisord.conf 重载配置:supervisorctl reload
报错信息: 
Error: .ini file does not include supervisorctl section 解决办法: 一个权限问题,步骤: 1. 先确保supervisord.conf中有[supervisord],[supervisorctl]有这两个基本模块,还有[program:XXX]本身程序的配置(能够在supervisord.conf也能够在/etc/supervisor/*.ini中) 2. 最关键的两个命令:chmod +x /usr/bin/supervisord chmod +x /usr/bin/supervisorctl chmod +x /etc/supervisord.conf主要是把把相关文件都受权了 3. 把supervisord杀掉后再次启动supervisord 
Exited too quickly (process log may have details) 解决办法: 1. 先确认[program:XXX]中本身的程序的command=<启动命令>和 directory=<运行命令的路径>没有问题,python是否是用的本身要的环境的python(好比虚拟环境的),log文件的文件夹是否是已经建立(没建立的话supervisor没权限生成log文件),以及改log文件是否是受权给全部用户了(可参考前面的解决办法chmod +x aaaaa.log) 2. 确保用上面的配置中的command在指定路径能够直接运行不会报错,这时候通常就不会有什么问题了。这时候tail你本身的log文件通常就能看到log信息,启动失败报错的信息也会在你的log文件中,照着解决后supervisorctl reload就行了。 3. 若是上面的命令确保能够跑,但仍是无法正常运行,也看不到本身程序的报错(否则你就能根据报错解决问题了),那么恭喜,你遇到了跟我同样的状况。个人解决办法很诡异,尝试把[program:XXX]中的名字换成了一个跟启动命令不同的另外一个名字(不要过短),reload以后竟然就能够跑了

生成配置文件ruby

安装好supervisor以后,默认是没有生成配置文件的。能够经过如下命令生成配置文件bash

echo_supervisord_conf > /etc/supervisord.conf

咱们一般是把配置文件放到/etc/下面,固然也能够放到任意路径下面。服务器

启动ui

如下启动顺序由上到下优先级,依次递减加密

supervisord                                   #默认去找$CWD/supervisord.conf,也就是当前目录
supervisord                                   #默认$CWD/etc/supervisord.conf,也就当前目录下的etc目录
supervisord                                   #默认去找/etc/supervisord.conf的配置文件
supervisord -c /home/supervisord.conf         #到指定路径下去找配置文件

supervisor组件

还有一个比较坑的  若是你是直接把laravel官方文档中的supervisor配置拿过来的话 必定记得改驱动以下图所

nodaemon=false               ; 若是是true,supervisord进程将在前台运行
                               默认为false,也就是后台以守护进程运行。。。非必须设置
 
上面是重载,下面是从新加载配置文件,当咱们修改文件从新启动
supervisorctl reload
### 或者 supervisorctl -c /etc/supervisord.conf

默认supervisor是不启动的
那个-n -c 是个前台程序没有用的

# 若是是 Ubuntu 添加如下内容(这里要写全路径,由于此时PATH的环境变量未必设置) /usr/local/bin/supervisord -c /etc/supervisord.conf # 若是是 Centos 添加如下内容 /usr/bin/supervisord -c /etc/supervisord.conf

查看正在守候的进程

若是没有开机自启,那么最开始是须要启动服务的。。。须要unlinksupervisorctl
本站公众号
   欢迎关注本站公众号,获取更多信息