正确离线安装supervisor

正确离线安装supervisor

supervisor简介

supervisor是一个用python语言编写的进程管理工具,它可以很方便的监听、启动、停止、重启一个或多个进程。当一个进程意外被杀死,supervisor监听到进程死后,可以很方便的让进程自动恢复,不再需要程序员或系统管理员自己编写代码来控制。

supervisor 会涉及三个重要的命令

  • supervisord

可以理解成supervisor的服务端

运行supervisor时会启动一个进程supervisord,它负责启动所管理的进程,并将所管理的进程作为自己的子进程来启动,而且可以在所管理的进程出现崩溃时自动重启

  • supervisorctl

可以理解成supervisor的客户端

supervisorctl是命令行管理工具,可以用如下命令来进行子进程的管理,如:

preview
  • echo_supervisord_conf

用来生成默认的配置文件,一般生成默认文件为 supervisor.conf

supervisor安装的前期准备(全部使用压缩包的方式)

supervisor是用python写的运行在linux下的进程管理工具,安装supervisor的时候依赖 python的一些包,它依赖:python、setuptools、meld3

1、python安装

可以参考此处安装python:https://www.cnblogs.com/wintest/p/12057170.html

下载python链接:https://www.python.org/ftp/python/

下载相应的压缩包,如:wget https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tgz

tar -xvf Python-3.6.8.tgz

2、setuptools安装

https://pypi.python.org/pypi/setuptools

下载压缩包,用tar解压压缩包,安装,如

tar -zxvf setuptools-0.6c11.tar.gz cd setuptools-0.6c11 python setup.py install

3、meld3安装

https://pypi.python.org/pypi/meld3

wget https://pypi.python.org/packages/45/a0/317c6422b26c12fe0161e936fc35f36552069ba8e6f7ecbd99bbffe32a5f/meld3-1.0.2.tar.gz#md5=3ccc78cd79cffd63a751ad7684c02c91

tar -zxvf meld3-1.0.2.tar.gz cd meld3-1.0.2 python setup.py install

4、supervisor安装

tar -zxvf supervisor-3.3.1.tar.gz cd supervisor-3.3.1 python setup.py install

此处 supervisor安装后会生成我们关心的如下几个可执行程序:

  • supervisord 路径
supervisord:  /usr/local/bin/supervisord
  • supervisorctl 路径
supervisorctl:  /usr/local/bin/supervisorctl
  • echo_supervisord_conf 路径
echo_supervisord_conf:  /usr/local/bin/echo_supervisord_conf
img

验证supervisor是否安装成功

supervisorctl --help
preview

supervisor配置

创建必要目录和文件

  • 创建 /etc/supervisor 目录
mkdir /etc/supervisor
  • echo_supervisord_conf 生成supervisord.conf
echo_supervisord_conf  > /etc/supervisor/supervisord.conf

修改/etc/supervisor/supervisord.conf文件内容

  • 将unix_http_server 下的 file 路径改掉,如下:
[unix_http_server] 
file=/var/run/supervisor.sock  ; (the path to the socket file)
preview
  • 将supervisord 下的logfile 路径 和 pidfile 路径 改掉,如下:
[supervisorctl] 
serverurl=unix:///var/run/supervisor.sock ; use a unix:// URL  for a unix socket
preview
  • 将include 下的 files 路径改掉,如下:
[include] files = conf.d/*.conf

根据上述修改的路径,创建相应的文件和添加权限

创建文件:

touch /var/run/supervisor.sock 
touch /var/log/supervisord.log 
touch /var/run//supervisord.pid 
mkdir /etc/supervisor/conf.d 
添加权限 
chmod 777 /var/run chmod 777 /var/log

编写自己需要监控的子进程程序

子程序配置文件的编写

/etc/supervisor/conf.d 目录下创建自己的子进程配置文件,如:

/etc/supervisor/conf.d 创建文件 test.conf

[program:test] 
process_name=%(program_name)s_%(process_num)02d 
command= go run main.go         # 运行命令 
directory=/home/qb/             # 运行文件目录 
autostart=true                  # 自动启动 
autorestart=true                # 自动重新启动 
user=root                       # 哪一个用户执行 
redirect_stderr=true            #重定向错误
   ![preview](https://upload-images.jianshu.io/upload_images/25834849-ed14ce7d8262c311.jpeg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

子程序的编写

其中上述 main.go 是我临时写的一个demo程序,简单循环1秒钟写入字符串到文件中(写到文件中是为了便于查看效果),如:

package main
import (   "fmt"   "os/exec"   "time")

func main() {   

  for {     
          cmd := exec.Command("/bin/bash", "-c", `echo 222 >> a.txt`)     
          stdout, err := cmd.StdoutPipe()    
          if err != nil {      
              fmt.Printf("Error:can not obtain stdout pipe for command:%s\n", err)       
          return    
    }    

   //执行命令    
   if err := cmd.Start(); err != nil {
         fmt.Println("Error:The command is err,", err)       
         return     
    }     

  fmt.Println(stdout) 
  time.Sleep(time.Second * time.Duration(1))   
}

启动superviosr

1、unlink一下

unlink /var/run/supervisor.sock

2、启动supervisor:

supervisord -c /etc/supervisor/supervisord.conf

3、查看程序运行状态

supervisorctlstatus

查看效果

img

子程序是 每间隔1秒钟 向 a.txt文件中写入字符串 222

img

进一步测试

  • 删掉子进程,测试supervisor是否会拉起子进程
img

将supervisor加入到开启启动服务中

1、写服务文件

vim /usr/lib/systemd/system/supervisord.service

supervisord.service

[Unit] 

Description=Supervisor daemon 

[Service] 

Type=forking ExecStart=/usr/local/bin/supervisord -c /etc/supervisor/supervisord.conf 

ExecStop=/usr/local/bin/supervisorctl shutdown 

ExecReload=/usr/local/bin/supervisorctl reload 

KillMode=process Restart=on-failure 

RestartSec=42s 

[Install] 

WantedBy=multi-user.target

2、使能服务

systemctl enable supervisord

3、验证是否使能成功

systemctl is-enabled supervisord

出现enable说明成功

img

4、重启机器验证 supervisor是否随开机

常用命令提示

service supervisord start #启动程序 

service supervisord stop #停止程序 

service supervisord status #查看状态 

supervisorctl shutdown #关闭所有任务

 supervisorctl stop|start 子程序名字 #启动或停止服务 

supervisorctl status #查看所有任务状态

异常情况提供参考

切记一定要把目录名,文件名 全部写正确,不要自己坑了自己!!

1、error: <class 'socket.error'>, [Errno 111] Connection refused: file: /usr/lib64/python2.6/socket.py line: 567

解决方式: 使用指定配置文件的方式处理

supervisord -c /etc/supervisor/supervisord.conf

2、初始化配置文件 echo_supervisord_conf 报错

解决方式:手动创建配置文件路径

mkdir /etc/supervisor

echo_supervisord_conf > /etc/supervisor/supervisord.conf

3、操作supervisorctl 查看没有test进程

解决方式:/etc/supervisor/supervisord.conf 中 打开 include 模块

img

4、Unlinking stale socket /tmp/supervisor.sock

解决方式:

unlink /var/run/supervisor.sock

作者:小魔童哪吒

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 158,425评论 4 361
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,058评论 1 291
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 108,186评论 0 243
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,848评论 0 204
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,249评论 3 286
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,554评论 1 216
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,830评论 2 312
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,536评论 0 197
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,239评论 1 241
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,505评论 2 244
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,004评论 1 258
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,346评论 2 253
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,999评论 3 235
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,060评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,821评论 0 194
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,574评论 2 271
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,480评论 2 267

推荐阅读更多精彩内容