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
(centos)

 

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
ubuntu

 

其他方法(开机自启 推荐)

 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。

 

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信号,包括子进程
vim etc/supervisor.d/tomcat-demo.conf

启动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信号,包括子进程
View Code

 

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 

 

posted @ 2021-09-06 00:19  风hua  阅读(663)  评论(0)    收藏  举报