经过这几天的折腾,我的supervisor终于可以正常的运行了。有折腾就有收获,这里我就来说说supervisor中遇到的问题。
首先,我先说一下supervisor的安装过程吧!这个相信google就一堆,这里主要讲supervisor的配置部分。
环境:ubuntu16.04 python2.7 准备安装supervisor3.2
ubuntu安装直接运行
apt-get install supervisor
就可以了。以命令行的方式创建默认的配置文件
echo_supervisord_conf > /etc/supervisor/supervisord.conf
查看配置文件
vim /etc/supervisor/supervisord.conf
这里有个对配置文件有比较详细的讲解,参考这里就可以了接下来就说说配置中几个需要get到的点。
首先是这两个服务器端配置项:
[unix_http_server] ; supervisord的unix socket服务配置file=/tmp/supervisor.sock ; socket文件的保存目录;chmod=0700 ; socket的文件权限 (default 0700);chown=nobody:nogroup ; socket的拥有者和组名;username=user ; 默认不需要登陆用户 (open server);password=123 ; 默认不需要登陆密码 (open server)[inet_http_server] ; supervisord的tcp服务配置;port=127.0.0.1:9001 ; tcp端口;username=user ; tcp登陆用户;password=123 ; tcp登陆密码
说明一下,supervisor是服务器端和客服端模式运行的。 客服端负责向服务器端发送命令。 服务器端负责根据客服端的命令和配置文件对进程进程调度。
而服务器端和客服端有两种通信模式,一种是通过上述unix_http_server 配置的tcp套接字通信。 一种是通过inet_http_server配置的端口通信模式。 如果有接触过php-fpm和nginx之间的通信的话,这里是一样的道理。
如果supervisor要正常工作,那unix_http_server和inet_http_server两个只要有一个配置正确就可以了,然后客户端supervisorctl配置同样的通信模式就可以了,这个我后面说。
但是这里我们两个都给配置起来。原因是:
客户端连接安全起见我们用tcp链接的方式配置,所以unix_http_server是要配置的。
还有一个模式inet_http_server这个配置好了。启动后会启动一个http_server管理界面,我可以通过的网页方式进行管理。
要外网可以访问,上述配置中port项要改成
port=0.0.0.0:9001
或者port=*:9001
,这个学过网络工程师的懂。
接下来,讲到客户端配置模块[supervisorctl],默认的配置是:
serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL for a unix socket;serverurl=http://127.0.0.1:9001 ; use an http:// url to specify an inet socketusername=chris ; 如果设置应该与http_username相同password=123 ; 如果设置应该与http_password相同;prompt=mysupervisor ; 命令行提示符,默认"supervisor";history_file=~/.sc_history ; 命令行历史纪录
这里客户端的配置就是为了和服务器端对接,所以你可以看到serveurl有两种形式,一种是tcp,一种是端口,对应我们上面讲到的服务器端的两种方式,所以这里我们使用tcp方式把第一条去掉注释就可以了。
同时我们这里username和password要配置成和上面unit_http_server一样的,跟我们上QQ一样的道理,用户名密码和上面配置不匹配了,这个superctl就和服务器端通信不了无法正常工作了。
3. 最后讲到supervisor.conf中需要修改的最后一个地方 [include] ,默认是
;[include];files = relative/directory/*.ini
这里我们修改成:
[include]files = /etc/supervisor/conf.d/*.conf
这个路径下配置着我们需要管理的各个进程的配置。
我们可以新建一个example.conf
,配置如下 [program:shadowsocks]command=ssserver -c /etc/shadowsocks.jsonautostart=trueautorestart=trueuser=nobody
然后启动过程:
我们先启动服务器端:
supervisord -c /etc/supersivor/supervisord.conf
客服端的使用有两种方法:
直接控制台使用。
获得所有程序状态 supervisorctl status关闭目标程序 supervisorctl stop spider启动目标程序 supervisorctl start spider关闭所有程序 supervisorctl shutdown
进入supervisorctl客户端交互模式:
$ supervisorctlsupervisor> helpdefault commands (type help):=====================================add exit open reload restart start tailavail fg pid remove shutdown status updateclear maintail quit reread signal stop versionsupervisor> start example