支持的系统
Supervisor 是一个 UNIX 下的进程管理软件
Supervisor 不可以在任何版本的 Windows 上运行
Supervisor 可以运行在 Python 2.4 或者更高的 Python版本,但是不可以在任何 Python 3 的版本上运行。
1:安装很简单使用python工具安装
[root@xxxxx ~]# pip install supervisor
安装完成后出现:
[root@xxxxxx ~]# ll /usr/bin/super*
-rwxr-xr-x 1 root root 402 7月 25 14:39 /usr/bin/supervisorctl
-rwxr-xr-x 1 root root 398 7月 25 14:39 /usr/bin/supervisord
说明:
supervisor服务守护进程:/usr/bin/supervisord
supervisor服务控制程序:/usr/bin/supervisorctl
使用supervisord的命令行客户端管理工具supervisorctl,来管理进程
2:配置
运行 echo_supervisord_conf命令,可输出详细的配置文件内容,配置文件中分号“;”的功能为注释
[root@xxxxxx ~]# echo_supervisord_conf
将默认的配置文件重定向至/etc路径下(方便管理)
[root@xxxxx ~]# echo_supervisord_conf > /etc/supervisord.conf
文件最后有个配置项:【一定要打开include本行,就是要去掉前面的分号】
[include]
;files = relative/directory/*.ini
files = /etc/supervisor/*.conf
可以把需要监控的脚本单独写在一个文件中,在这里配置路径进行监控
[root@xxxxxx supervisor]# ll /etc/supervisor/*.conf
-rw-r--r-- 1 root root 566 8月 2 18:27 /etc/supervisor/intension_predict.conf
intension_predict.conf 这个文件(用 Python 和 Flask 框架编写的一个服务)就是单独配置的需要监控的程序,以下是具体配置内容:
[root@xxxxxx supervisor]# cat /etc/supervisor/intension_predict.conf
[program:自定义的程序名字]
directory=脚本的绝对路径
command=python intension_predict.py
redirect_stderr=true
stdout_logfile=日志的输出绝对路径+文件名字
autostart=true ; 程序是否随supervisor启动而启动
autorestart=true ; 程序停止时,是否自动重启
stopasgroup=true ; send stop signal to the UNIX process group (default false)
killasgroup=true ; SIGKILL the UNIX process group (def false)
Notice: 如何停止子进程
场景:如果supervisord.conf中配置的command是执行一个bash,而bash里执行Java,那么当使用supervisorctl stop [programname]停止程序时,只有上层进程被停止,而java进程没有被停止。
解决办法:
在配置文件中设置:
stopasgroup=true
killasgroup=true
3:启动 supervisor
[root@xxxxxx supervisor]# supervisord -c /etc/supervisord.conf
4:查看监控的程序
方式1:使用supervisorctl管理程序
开启/停止某个程序
supervisorctl [start | stop] [program名称] //在supervisord.conf中定义的
查看进程状态
$supervisorctl status
$ supervisorctl status
$ supervisorctl stop usercenter
$ supervisorctl start usercenter
$ supervisorctl restart usercenter
$ supervisorctl reread
$ supervisorctl update
方式2:启动 web 管理界面
修改如下:
[root@xxxxxx supervisor]# vim /etc/supervisord.conf
[inet_http_server] ; inet (TCP) server disabled by default
port=IP:9001 ; ip_address:port specifier, *:port for all iface
username=xxxxx ; default is no username (open server)
password=xxxxx ; default is no password (open server)
浏览器打开 http://IP:9001 进行访问,需要输入上面配置的用户名密码。
5:配置开机启动 supervisor 【可以配置也可以不配置,最好配置~】
第1步:新建文件 supervisord.service 并进行配置
第2步:将文件 supervisord.service 拷贝至 /usr/lib/systemd/system/supervisord.service
第1步:新建文件 supervisord.service 并进行配置
[root@xxxxxx supervisor]# > supervisord.service
# 写入如下配置,然后保存,查看文件
[root@xxxxxx supervisor]# cat supervisord.service
[Unit]
Description=Supervisor daemon
[Service]
Type=forking
# 需要查看并配置服务器实际安装过程中配置文件 supervisord.conf 所在的路径
ExecStart=/usr/bin/supervisord -c /etc/supervisord.conf
ExecStop=/usr/bin/supervisorctl shutdown
ExecReload=/usr/bin/supervisorctl reload
KillMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target
# 将文件拷贝至:“/usr/lib/systemd/system/supervisord.service”
# https://www.cnblogs.com/94cool/p/5952219.html
# 2018年 06月 05日 星期二 14:39:18 CST
第2步:将文件 supervisord.service 拷贝至 /usr/lib/systemd/system/supervisord.service
# 拷贝
[root@xxxxxx supervisor]# cp supervisord.service /usr/lib/systemd/system/supervisord.service
# 设置为开启启动
[root@xxxxxx supervisor]# systemctl enable supervisord
Created symlink from /etc/systemd/system/multi-user.target.wants/supervisord.service to /usr/lib/systemd/system/supervisord.service.
# 验证一下是否为开机启动
[root@xxxxxx supervisor]# systemctl is-enabled supervisord
enabled