1. 安装supervisor
yum install supervisor-3.1.4-1.el7
supervisor已经放到5giot的yum源中,若无法安装则更新一下yum配置:
yum clean all
yum makechche
然后再执行yum install supervisor操作。
2. 配置supervisord
supervisord的配置文件默认放在/etc文件夹中,
vim /etc/supervisord.conf
可以看到它的内容为:
[include]
files = supervisord.d/*.conf
即将supervisord.d目录下的所有以.conf文件结尾的文件包含进来,通常具体的服务配置放在supervisord.d目录下,以.conf或.ini结尾,再通过include的方式包含进来。
下面以配置的services.conf文件中的ac-access服务为例介绍supervisord配置(红色地方需改成本机配置),详细配置介绍放到附录中。
[program:ac-access] //服务名称
command=/root/services_update/ac-access/ac-access //执行文件
-log_dir=/var/log/nb-iot-platform/ac-blobstore //日志目录
directory=/root/services_update/ac-access //执行命令存放目录
user=root //该program的启动用户
startsecs=1 //子进程启动多少秒之后,此时状态如果是running,则我们认为启动成功
stopwaitsecs=1 //当我们向子进程发送stopsignal信号后,到系统返回信息给supervisord,所等待的最大时间。超过这个时间,supervisord会向该子进程发送一个强制kill的信号。
startretries=3 //进程启动失败后,最大尝试启动的次数。当超过3次后,supervisor将把此进程的状态置为FAIL
autostart=true //如果是true的话,子进程将在supervisord启动后被自动启动
autorestart=true //这个是设置子进程挂掉后自动重启的情况,有三个选项,false,unexpected和true。
stdout_logfile=/var/log/nb-iot-platform/ac-access/stdout.log //子进程的stdout的日志路径
stderr_logfile=/var/log/nb-iot-platform/ac-access/stderr.log //设置stderr写的日志路径
3. 启动supervisord
以下启动顺序由上到下优先级,依次递减
supervisord //默认去找$CWD/supervisord.conf,也就是当前目录
supervisord //默认$CWD/etc/supervisord.conf,也就当前目录下的etc目录
supervisord //默认去找/etc/supervisord.conf的配置文件
supervisord -c /home/supervisord.conf //到指定路径下去找配置文件
4. 利用supervisorctl控制进程
一、添加好配置文件后,更新新的配置到supervisord
supervisorctl update
二、重新启动配置中的所有程序
supervisorctl reload
三、查看当前的进程
supervisorctl status
四、启动某个进程(program_name=你配置中写的程序名称)
supervisorctl start program_name
五、停止某一进程 (program_name=你配置中写的程序名称)
pervisorctl stop program_name
六、重启某一进程 (program_name=你配置中写的程序名称)
supervisorctl restart program_name
七、停止全部进程
supervisorctl stop all
注意:用stop停止掉的进程,用reload或者update都不会自动重启。
附录:(supervisord配置文件详细说明)
[unix_http_server]
file=/tmp/supervisor.sock ; socket文件的路径,supervisorctl用XML_RPC和supervisord通信就是通过它进行 的。如果不设置的话,supervisorctl也就不能用了,不设置的话,默认为none。 非必须设置
;chmod=0700 ; 这个简单,就是修改上面的那个socket文件的权限为0700
不设置的话,默认为0700。 非必须设置
;chown=nobody:nogroup ; 这个一样,修改上面的那个socket文件的属组为user.group
不设置的话,默认为启动supervisord进程的用户及属组。非必须设置
;username=user ; 使用supervisorctl连接的时候,认证的用户
不设置的话,默认为不需要用户。 非必须设置
;password=123 ; 和上面的用户名对应的密码,可以直接使用明码,也可以使用SHA加密
如:{SHA}82ab876d1387bfafe46cc1c8a2ef074eae50cb1d
默认不设置。。。非必须设置
;[inet_http_server] ; 侦听在TCP上的socket,Web Server和远程的supervisorctl都要用到他
不设置的话,默认为不开启。非必须设置
;port=127.0.0.1:9001 ; 这个是侦听的IP和端口,侦听所有IP用 :9001或*:9001。
这个必须设置,只要上面的[inet_http_server]开启了,就必须设置它
;username=user ; 这个和上面的uinx_http_server一个样。非必须设置
;password=123