2 Linux下进程管理工具supervisor
Linux下进程管理工具supervisor
官网链接:http://www.supervisord.org/installing.html
supervisor是Linux下常用的一个进程管理工具。最常见的一个应用场景是监控服务器上的某个应用服务,如果该应用服务异常退出,则重启该服务,保证服务不被长时间中断。
supervisor(开机自启,查看状态)
配置开机自启
systemctl enable supervisord
查看
systemctl status supervisord
手动启动
systemctl start supervisord
如果上述命令不可以,执行如下操作
加入systemctl 控制管理,配置开机自启动
centos
配置Supervisor开机启动: 新建一个“supervisord.service”文件 # dservice for systemd (CentOS 7.0+) # by ET-CS (https://github.com/ET-CS) [Unit] Description=Supervisor daemon [Service] Type=forking ExecStart=/usr/bin/supervisord -c /etc/supervisor/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” systemctl enable supervisord 验证一下是否为开机启动:systemctl is-enabled supervisord
ubuntu
补充:文件保存至 /etc/systemd/system/
1创建 supervisord.service 服务文件 sudo vim /etc/systemd/system/supervisord.service 2 复制以下内容 [Unit] Description=Supervisor daemon [Service] 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 3 保存关闭 4启用服务。 sudo systemctl start supervisord sudo systemctl status supervisord 5开启自启动 sudo systemctl enable supervisord
其他方法(开机自启 推荐)
Linux 在启动的时候会执行 /etc/rc.local 里面的脚本,所以只要在这里添加执行命令就可以
# 如果是 Ubuntu 添加以下内容 /usr/local/bin/supervisord -c /etc/supervisord.conf # 如果是 Centos 添加以下内容 /usr/bin/supervisord -c /etc/supervisord.conf
1安装
以生产环境使用较多的CentOS 为例, 使用yum包管理器安装
yum install supervisor
ubuntu
sudo apt-get install supervisor
对于非centos系统,则可以使用Python 强大的包管理器pip来完成安装
pip install supervisor
2 安装完成后,生成配置文件。
supervisor 提供了 echo_supervisord_conf 命令,用于生成supervisord 的配置文件。(如果pip安装,echo_supervisord_conf 会安装在相应pip的目录下。)
一般配置文件会保存至/etc/ 目录下,生成方式如下:
echo_supervisord_conf > /etc/supervisord.conf mkdir -p /etc/supervisor.d // supervisord 支持include 的方式将多个配置放置不同文件中, 需要配置文件中指定
supervisor 提供了两个命令给用户:
- supervisord supervisor 守护其他服务的进程
- supervisorctl supervisor的命令行工具
最后启动supervisor即可:
supervisord -c /etc/supervisord.conf
PS:
如果使用yum管理安装的,可以直接使用systemctl 管理启动和暂停supervisord。
3 supervisor 配置说明
通过这种形式安装的supervisor,其配置文件的目录位于:
/etc/supervisord.conf (主配置文件,下面会详细介绍)
/etc/supervisor.d/ (默认子进程配置文件,也就是需要我们根据程序配置的地方)
3.1supervisord.conf 主配置文件说明
[unix_http_server] file=/home/supervisor/supervisor.sock ; supervisorctl使用的 socket文件的路径 ;chmod=0700 ; 默认的socket文件权限0700 ;chown=nobody:nogroup ; socket文件的拥有者 [inet_http_server] ; 提供web管理后台管理相关配置 port=0.0.0.0:9001 ; web管理后台运行的ip地址及端口,绑定外网需考虑安全性 ;username=root ; web管理后台登录用户名密码 ;password=root [supervisord] logfile=/var/log/supervisord.log ; 日志文件,默认在$CWD/supervisord.log logfile_maxbytes=50MB ; 日志限制大小,超过会生成新文件,0表示不限制 logfile_backups=10 ; 日志备份数量默认10,0表示不备份 loglevel=info ; 日志级别 pidfile=/home/supervisor/supervisord.pid ; supervisord pidfile; default supervisord.pid ; pid文件 nodaemon=false ; 是否在前台启动,默认后台启动false minfds=1024 ; 可以打开文件描述符最小值 minprocs=200 ; 可以打开的进程最小值 [supervisorctl] serverurl=unix:///home/supervisor/supervisor.sock ; 通过socket连接supervisord,路径与unix_http_server->file配置的一致 [include] files = supervisor.d/*.conf ;指定了在当前目录supervisor.d文件夹下配置多个配置文件
3.2定义supervisor管理进程配置文件
从上面的配置文件[include]->files配置项我们可以知道,supervisor会把supervisor.d/下以conf结尾的配置文件都加载进来,那么我们在这个目录下面新建一个s25crm.conf,如下:
子进程示例1 :
vim /etc/supervisor.d/ s25crm.conf
[program:s25crm];[program:xxx] 这里的xxx是指的项目名字
directory = /opt/project ;程序所在目录
command=/opt/venv_crm_again/bin/uwsgi --ini /opt/tf_crm/uwsgi.ini ;supervisor其实就是在帮你执行命令而已! autostart=true ; 在supervisord启动的时候也自动启动 startsecs=10 ; 启动10秒后没有异常退出,就表示进程正常启动了,默认为1秒 autorestart=true ; 程序退出后自动重启,可选值:[unexpected,true,false],默认为unexpected,表示进程意外杀死后才重启 stopasgroup=true ;默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程 killasgroup=true ;默认为false,向进程组发送kill信号,包括子进程
tomcat例子:
[program:tomcat-demo] directory=/usr/local/tomcat/demo-8080/bin command=/usr/local/tomcat/demo-8080/bin/catalina.sh run autostart=true ; 在supervisord启动的时候也自动启动 startsecs=10 ; 启动10秒后没有异常退出,就表示进程正常启动了,默认为1秒 autorestart=true ; 程序退出后自动重启,可选值:[unexpected,true,false],默认为unexpected,表示进程意外杀死后才重启 startretries=3 ; 启动失败自动重试次数,默认是3 user=root ; 用哪个用户启动进程,默认是root priority=999 ; 进程启动优先级,默认999,值小的优先启动 redirect_stderr=true ; 把stderr重定向到stdout,默认false stdout_logfile_maxbytes=20MB ; stdout 日志文件大小,默认50MB stdout_logfile_backups = 20 ; stdout 日志文件备份数,默认是10 stdout_logfile=/usr/local/supervisor-3.3.4/logs/token.log stopasgroup=true ;默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程 killasgroup=true ;默认为false,向进程组发送kill信号,包括子进程 [program:logstash] directory=/mnt/logstash-6.8.1/bin command=/mnt/logstash-6.8.1/bin/logstash -f /mnt/logstash-6.8.1/bin/logstash/config/logstash.conf autostart=true ; 在supervisord启动的时候也自动启动 startsecs=10 ; 启动10秒后没有异常退出,就表示进程正常启动了,默认为1秒 autorestart=true ; 程序退出后自动重启,可选值:[unexpected,true,false],默认为unexpected,表示进程意外杀死后才重启 startretries=3 ; 启动失败自动重试次数,默认是3 user=root ; 用哪个用户启动进程,默认是root priority=1 ; 进程启动优先级,默认999,值小的优先启动 redirect_stderr=true ; 把stderr重定向到stdout,默认false stdout_logfile_maxbytes=20MB ; stdout 日志文件大小,默认50MB stdout_logfile_backups = 20 ; stdout 日志文件备份数,默认是10 stdout_logfile=/usr/local/supervisor-3.3.4/logs/logstash.log stopasgroup=true ;默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程 killasgroup=true ;默认为false,向进程组发送kill信号,包括子进程
启动sh脚本版本
[program:ivt-platform] directory=/usr/local/jar/platform-9084/ivt-platform command=/usr/local/jar/platform-9084/ivt-platform/ivt.sh start autostart=true ; 在supervisord启动的时候也自动启动 startsecs=10 ; 启动10秒后没有异常退出,就表示进程正常启动了,默认为1秒 autorestart=true ; 程序退出后自动重启,可选值:[unexpected,true,false],默认为unexpected,表示进程意外杀死后才重启 startretries=3 ; 启动失败自动重试次数,默认是3 user=root ; 用哪个用户启动进程,默认是root priority=999 ; 进程启动优先级,默认999,值小的优先启动 redirect_stderr=true ; 把stderr重定向到stdout,默认false stdout_logfile_maxbytes=20MB ; stdout 日志文件大小,默认50MB stdout_logfile_backups = 20 ; stdout 日志文件备份数,默认是10 stdout_logfile=/usr/local/supervisor-3.3.4/logs/ivt-platform.log stopasgroup=true ;默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程 killasgroup=true ;默认为false,向进程组发送kill信号,包括子进程
4 重启supervisord
service supervisord restart
5 web页面观察效果
浏览器输入:服务器ip:9001 (这里的web管理页面端口是在配置文件配置好的。)

如图所示,我们可以可以观察到springboot程序已经是running状态了,pid是27517,我们可以点击Tail -f来观察输出日志,它的作用跟我们在服务器直接“tail -f”是类似的。
常用相关命令
1 启动supervisor
supervisord -c /etc/supervisord.conf 如果不行执行如下命令: # 如果是 Ubuntu 添加以下内容 /usr/local/bin/supervisord -c /etc/supervisord.conf # 如果是 Centos 添加以下内容 /usr/bin/supervisord -c /etc/supervisord.conf
2 supervisorctl
基础命令:
supervisorctl start app #启动某个进程
supervisorctl restart app #重启某个进程
supervisorctl stop app #关闭某个进程(显式用stop停止掉的进程,用reload或者update都不会自动重启)
supervisorctl reload #载入最新的配置文件,停止原有进程并按新的配置启动、管理所有进程。
supervisorctl update #根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启。
supervisorctl stop all #停止全部管理进程
supervisorctl shutdown # 关闭supervisord服务
supervisorctl的交互式管理命令
提供了如下命令 (venv_crm_again) [root@s25linux tf_crm]# supervisorctl -c /etc/supervisord.conf s25crm RUNNING pid 41451, uptime 0:01:34 supervisor> supervisor>start s25crm supervisor>stop s25crm supervisor>status supervisor>start all supervisor>stop all
浙公网安备 33010602011771号