supervisor:一种进程管理利器,让程序后台运行
类似于windows service一样的服务,能实现监控程序状态,异常退出是能自动启动
1.安装supervisor
yum install python-setuptools
easy_install supervisor //安装依赖
2.配置supervisor
创建目录
mkdir /etc/supervisor
通过echo_supervisor_conf 程序(用来生成初始配置文件,文件名可自定义)来初始化一个配置文件
//自动生成一个默认的配置文件
echo_supervisor_conf > /etc/supervisor/supervisord.conf
通过vi 修改配置信息
vi /etc/supervisor/supervisord.conf
修改为:
[include]
files = /etc/supervisor/conf.d/*.ini ;创建一个supervisor 进程配置文件加载目录(定位服务脚本的位置)让supervisor自动加载改目录下后缀为.ini的文件作为进程配置服务
3.为部署项目添加进程配置文件
在/etc/supervisor/conf.d/ 创建文件main.ini
vi main.ini
[program:main] ##自定义进程名称
command=python xxxx ## 程序启动命令
#directory=/data/webroot/xxxx ## 命令执行的目录 程序存放字服务器上的目录
autostart=true ## 在supervisor启动是 程序是否启动
autorestart=true ## 程序退出后自动重启
#startretries=5 ## 启动失败自动重试次数 默认为3
startsecs=2 ## 自动重启间隔
#user=root ## 设置启动进程的用户 默认 root
#stderr_logfile=/var/log/xxx.err.log ## 标准错误日志
#stdout_logfile=/var/log/xxx.out.log ## 标准输出日志
#environment= ## 进程环境变量
#stopsignal=INT ## 请求停止是用来杀死程序的信号
4.启动服务
supervisord -c /etc/supervisor/supervisord.conf
若出现报错:
[root@yuan system]# supervisord -c /etc/supervisor/supervisord.conf
Error: Another program is already listening on a port that one of our HTTP servers is configured to use. Shut this program down first before starting supervisord.
For help, use /usr/bin/supervisord -h
错误原因是supervisor.sock这个文件会被系统自动删除或者其他原因不存在了,删除软连接就可以
解决:
find / -name supervisor.sock
unlink /tmp/supervisor.sock
或者
有可能因为一个使用supervisor配置的应用程序正在运行需执行 supervisorctl shutdown 命令终止
supervisorctl //打开命令行
ctl中: help //查看命令
ctl中: status //查看状态
另外如果修改了 /etc/supervisor/supervisord.conf ,需要执行 supervisorctl reload 来重新加载配置文件,否则不会生效
5.配置开机自启动
生成supervisord.service文件,保存在/usr/lib/systemd/system/
vi supervisord.service
[Unit]
Description=Supervisor daemon
[Service]
Type=forking
ExecStart=/usr/bin/supervisord -c /etc/supervisor/supervisord.conf
ExecStop=/usr/bin/supervisorctl $OPTIONS shutdown
ExecReload=/usr/bin/supervisorctl $OPTIONS reload
KillMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target
保存退出
systemctl enable supervisord
systemctl is-enabled supervisord
systemctl daemon-reload #重新加载某个服务的配置文件,如果新安装了一个服务,归属于 systemctl 管理,要是新服务的服务程序配置文件生效,需重新加载。
systemctl restart supervisord #重启,出错可能原因supervisor.sock,解决参考上方错误
视频链接地址:https://edu.csdn.net/course/play/25611/307228
详细配置参考地址:supervisor模块学习使用