你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

Linux进程管理工具—— Supervisor

[复制链接]
gaosmile 发布时间:2020-6-9 11:48
Supervisor安装与配置(linux/unix进程管理工具) Supervisor(http://supervisord.org)是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具,不支持Windows系统。它可以很方便的监听、启动、停止、重启一个或多个进程。用Supervisor管理的进程,当一个进程意外被杀死,supervisort监听到进程死后,会自动将它重新拉起,很方便的做到进程自动恢复的功能,不再需要自己写shell脚本来控制。
因为Supervisor是Python开发的,安装前先检查一下系统否安装了Python2.4以上版本。下面以CentOS7.6,Python2.7.5版本环境下,介绍Supervisor的安装与配置步聚:
实验环境
系统平台

  1. cat /etc/redhat-release
  2. CentOS Linux release 7.6.1810 (Core)
复制代码

Python版本

  1. python -V
  2. Python 2.7.5
复制代码
  1. 如果python版本低于2.6请升级,下面贴出一个安装python3.6.8的安装示例
复制代码

  1. yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel -y libffi-devel
  2. wget http://www.python.org/ftp/python/3.6.8/Python-3.6.8.tar.xz
  3. tar xf Python-3.6.8.tar.xz
  4. cd Python-3.6.8
  5. ./configure --prefix=/usr/local/python368
  6. make && make install
  7. echo 'export PATH=/usr/local/python368/bin:$PATH' >> /etc/profile
  8. source /etc/profile
  9. python3 -V
复制代码

安装 Supervisor
安装 Supervisor的方法很多,以下介绍三种,我这里所采用的为第三种
1、easy_install 安装 supervisor
安装Python包管理工具(easy_install) easy_install是setuptools包里带的一个命令,使用easy_install实际上是在调用setuptools来完成安装模块的工作,所以安装setuptools即可:

  1. wget http://pypi.io/packages/source/s/setuptools/setuptools-33.1.1.zip
  2. unzip setuptools-33.1.1.zip
  3. cd setuptools-33.1.1
  4. python setup.py install

  5. easy_install supervisor
复制代码

2、pip 安装 supervisor
使用 pip 来安装,前提要保证pip版本大于2.6

  1. pip install supervisor
复制代码

3、yum epel-release 安装 supervisor

  1. yum install -y epel-release && yum install -y supervisor
复制代码

superviso命令
supervisor安装完成后会生成三个执行程序:supervisortd、supervisorctl、echo_supervisord_conf:
•supervisortd:用于管理supervisor本身服务•supervisorctl:用于管理我们需要委托给superviso工具的服务•echo_supervisord_conf:用于生成superviso的配置文件•supervisor的守护进程服务(用于接收进程管理命令)•客户端(用于和守护进程通信,发送管理进程的指令)

  1. [root@Jumpserver /]# which supervisord
  2. /bin/supervisord
  3. [root@Jumpserver /]# which supervisorctl
  4. /bin/supervisorctl
  5. [root@Jumpserver /]# which echo_supervisord_conf
  6. /bin/echo_supervisord_conf
复制代码

配置Supervisor
通过运行echo_supervisord_conf程序生成supervisor的初始化配置文件
如果使用yum安装则此步骤省略,直接进行修改配置文件步骤

  1. mkdir /etc/supervisord.d
  2. echo_supervisord_conf > /etc/supervisord.conf
复制代码

修改配置文件
supervisor的配置文件内容有很多,不过好多都不需要修改就行使用,我这里只修改了以下两项

  1. #修改socket文件的mode,默认是0700
  2. sed -i 's/;chmod=0700/chmod=0766/g' /etc/supervisord.conf   

  3. #在配置文件最后添加以下两行内容来包含/etc/supervisord目录
  4. sed -i '$a [include] \
  5. files = /etc/supervisord.d/*.conf' /etc/supervisord.conf
复制代码

编写需要被Supervisor管理的进程
Supervisor只能管理非dameon进程,像默认的redis为前台运行、Tomcat其实是 startup.sh shutdown.sh来调用catalina.sh进行后台运行的,默认catalina.sh为前台运行的程序,不能管理像Nginx一样的非dameon进程
Tomcat被Supervisor管理
Tomcat安装如下:

  1. wget http://us.mirrors.quenda.co/apache/tomcat/tomcat-8/v8.5.47/bin/apache-tomcat-8.5.47.tar.gz
  2. yum install java-1.8.0-openjdk.x86_64 java-1.8.0-openjdk-devel.x86_64 -y
  3. tar xf apache-tomcat-8.5.47.tar.gz  -C /usr/local/
  4. mv /usr/local/apache-tomcat-8.5.47 /usr/local/tomcat
复制代码

想要我们的应用被Supervisor管理,就需要在/etc/supervisord目录下编写配置文件,Tomcat案例如下:

  1. vim /etc/supervisord.d/tomcat.conf
  2. [program:tomcat]                                        #程序唯一名称
  3. directory=/usr/local/tomcat                             #程序路径
  4. command=/usr/local/tomcat/bin/catalina.sh run           #运行程序的命令
  5. autostart=true                                          #是否在supervisord启动后tomcat也启动
  6. startsecs=10                                            #启动10秒后没有异常退出,就表示进程正常启动了,默认为1秒
  7. autorestart=true                                        #程序退出后自动重启,可选值:[unexpected,true,false],默认为unexpected,表示进程意外杀死后才重启;意思为如果不是supervisord来关闭的该进程则认为不正当关闭,supervisord会再次把该进程给启动起来,只能使用该supervisorctl来进行关闭、启动、重启操作
  8. startretries=3                                          #启动失败自动重试次数,默认是3
  9. user=root                                               #用哪个用户启动进程,默认是root
  10. priority=999                                            #进程启动优先级,默认999,假如Supervisord需要管理多个进程,那么值小的优先启动
  11. stopsignal=INT
  12. redirect_stderr=true                                    #把stderr重定向到stdout标准输出,默认false
  13. stdout_logfile_maxbytes=200MB                           #stdout标准输出日志文件大小,日志文件大小到200M后则进行切割,切割后的日志文件会标示为catalina.out1,catalina.out2,catalina.out3...,默认50MB
  14. stdout_logfile_backups = 100                            #stdout标准输出日志文件备份数,保存100个200MB的日志文件,超过100个后老的将被删除,默认为10保存10个
  15. stdout_logfile=/usr/local/tomcat/logs/catalina.out      #标准日志输出位置,如果输出位置不存在则会启动失败
  16. stopasgroup=false                                       #默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程
  17. killasgroup=false                                       #默认为false,向进程组发送kill信号,包括子进程
复制代码

启动进程 使用supervisord管理启动后,当你使用/usr/local/tomcat/shutdown.sh或者kill $PID的时候,supervisord都会认为是意外关闭,会自动再次把进程拉起,除非是使用supervisord命令关闭

  1. #supervisord启动
  2. supervisord -c /etc/supervisord.conf                    #启动supervisord进程,我们在配置文件中设置了 autostart=true 参数,在supervisord启动的时候 tomcat也随之启动
  3. ps -ef|grep java                                        #查看tomcat是否启动 
复制代码

程序管理

  1. supervisorctl status tomcat                             #tomcat状态
  2. supervisorctl stop tomcat                               #停止tomcat
  3. supervisorctl start tomcat                              #启动tomcat
  4. supervisorctl restart tomcat                            #重启tomcat
  5. supervisorctl reoload tomcat                            #重仔tomcat
复制代码

Redis被Supervisor管理
redis默认不在配置文件中添加 daemonize yes 参数则是前台启动的,所以也可以被我们的的Supervisor所管理 redis配置文件如下:

  1. cat redis6001.conf
  2. port 6001
  3. bind 192.168.31.230
  4. protected-mode yes
  5. pidfile "/usr/local/redis/run/redis6001.pid"
  6. loglevel notice
  7. logfile "/usr/local/redis/logs/redis6001.log"
  8. save 900 1
  9. stop-writes-on-bgsave-error yes
  10. rdbcompression yes
  11. rdbchecksum  yes
  12. dbfilename dump.rdb
  13. dir "/usr/local/redis/data/rdb/"
  14. timeout 0
  15. tcp-keepalive 300
复制代码

编写redis被Supervisor管理的案例

  1. vim /etc/supervisord.d/redis.conf
  2. [program:redis]
  3. directory=/usr/local/redis
  4. command=/usr/local/redis/bin/redis-server /usr/local/redis/etc/redis6001.conf
  5. autostart=true
  6. startsecs=10
  7. autorestart=true
  8. startretries=3
  9. user=root
  10. priority=999
  11. stopsignal=INT
  12. redirect_stderr=true
  13. stdout_logfile_maxbytes=200MB
  14. stdout_logfile_backups = 100
  15. stdout_logfile=/usr/local/redis/logs/redis6001.log
  16. stopasgroup=false
  17. killasgroup=false
复制代码

使用super启动redis

  1. #关闭tomcat
  2. supervisorctl stop tomcat
  3. tomcat: stopped

  4. #杀掉supervisord
  5. ps -ef|grep supervisord
  6. root     26927     1  0 10:47 ?        00:00:00 /usr/bin/python /bin/supervisord -c /etc/supervisord.conf
  7. root     27549 27402  0 11:07 pts/2    00:00:00 grep --color=auto super
  8. kill -9 26927

  9. #重新启动supervisord使其重新加载配置文件,supervisord默认会把redis和tomcat都拉起来
  10. supervisord -c /etc/supervisord.conf
复制代码

程序管理

  1. supervisorctl status redis                              #redis状态
  2. supervisorctl stop redis                                #停止redis
  3. supervisorctl start redis                               #启动redis
  4. supervisorctl restart reids                             #重启redis
  5. supervisorctl reoload redis                             #重载redis
复制代码

程序管理
程序管理

  1. supervisorctl status all                            #查看所有进程状态
  2. supervisorctl stop   all                            #停止所有进程
  3. supervisorctl start  all                            #启动所有进程
  4. supervisorctl restart all                           #重启所有进程
  5. supervisorctl reoload all                           #重载所有进程
复制代码

Supervisord开启启动配置

  1. vim /usr/lib/systemd/system/supervisord.service
  2. [Unit]
  3. Description=Process Monitoring and Control Daemon
  4. After=rc-local.service nss-user-lookup.target

  5. [Service]
  6. Type=forking
  7. ExecStart=/usr/bin/supervisord -c /etc/supervisord.conf

  8. [Install]
  9. WantedBy=multi-user.target
复制代码

  1. systemctl enable supervisord
  2. systemctl is-enabled supervisord
复制代码



收藏 评论0 发布时间:2020-6-9 11:48

举报

0个回答

所属标签

STM32团队

意法半导体微控制器和微处理器拥有广泛的产品线,包含低成本的8位单片机和基于ARM® Cortex®-M0、M0+、M3、M4、M33、M7及A7内核并具备丰富外设选择的32位微控制器及微处理器


最新内容

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版