supervisor的正确离线安装和使用

简介: supervisor的正确离线安装和使用

supervisor


supervisor简介

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

supervisor 会涉及三个重要的命令

  • supervisord

可以理解成supervisor的服务端

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

  • supervisorctl

可以理解成supervisor的客户端

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

supervisorctl status

查看子进程的状态

supervisorctl start 子进程名字

开启一个子进程

supervisorctl stop 子进程名字

停止一个子进程

supervisorctl restart 子进程名字

重启一个子进程

  • echo_supervisord_conf

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

 

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

supervisor是用python写的运行在linux下的进程管理工具,安装supervisor的时候依赖 python的一些包,它依赖:python、settools、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安装

wget https://pypi.python.org/packages/80/37/964c0d53cbd328796b1aeb7abea4c0f7b0e8c7197ea9b0b9967b7d004def/supervisor-3.3.1.tar.gz

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

 

验证supervisor是否安装成功

supervisorctl --help

 

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)

  • 将supervisord 下的logfile 路径 和 pidfile 路径 改掉,如下:
[supervisord] 
logfile=/var/log/supervisord.log ; (main log file;default $CWD/supervisord.log) pidfile=/var/run//supervisord.pid ; (supervisord pidfile;default supervisord.pid)

  • 将supervisorctl下的 serverurl 路径改掉,如下:

 

[supervisorctl] 
serverurl=unix:///var/run/supervisor.sock ; use a unix:// URL for a unix socket

  • 将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            #重定向错误

子程序的编写

其中上述 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、查看程序运行状态

supervisorctl status

查看效果

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

 

进一步测试

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

 

将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说明成功

 

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 模块

 

4、Unlinking stale socket /tmp/supervisor.sock

解决方式:

unlink /var/run/supervisor.sock

 

 

 

相关文章
openvpn安装文档
openvpn通过使用公开密钥(非对称密钥,加密解密使用不同的key,一个称为Publice key,另外一个是Private key)对数据进行加密的。这种方式称为TLS加密。openvpn使用TLS加密的工作过程是,首先VPN Sevrver端和VPN Client端要有相同的CA证书,双方通过交换证书验证双方的合法性,用于决定是否建立VPN连接。然后使用对方的CA证书,把自己目前使用的数据加密方法加密后发送给对方,由于使用的是对方CA证书加密,所以只有对方CA证书对应的Private key才能解密该数据,这样就保证了此密钥的安全性,并且此密钥是定期改变的。
2724 0
|
6月前
|
网络协议 Unix 应用服务中间件
Supervisor安装与配置
Supervisor安装与配置
|
Ubuntu
Ubuntu安装Jpom
Ubuntu安装Jpom
160 0
|
存储 缓存 NoSQL
Redis安装与常用命令
Redis安装与常用命令
105 0
|
监控 Ubuntu Python
Supervisor离线安装及使用
Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。它是通过fork/exec的方式把这些被管理的进程当作supervisor的子进程来启动,这样只要在supervisor的配置文件中,把要管理的进程的可执行文件的路径写进去即可。也实现当子进程挂掉的时候,父进程可以准确获取子进程挂掉的信息的,可以选择是否自己启动和报警
220 0
|
监控 Unix 程序员
正确离线安装supervisor
supervisor是一个用python语言编写的进程管理工具,它可以很方便的监听、启动、停止、重启一个或多个进程。当一个进程意外被杀死,supervisor监听到进程死后,可以很方便的让进程自动恢复,不再需要程序员或系统管理员自己编写代码来控制。
552 0
supervisor 安装、配置、使用
supervisor 安装、配置、使用
778 0
|
JavaScript
supervisor安装
supervisor安装
129 0
|
NoSQL 安全 测试技术
Redis安装与常用命令整合(2)
Redis安装与常用命令整合(2)
161 0
|
SQL NoSQL 关系型数据库
Redis安装与常用命令整合(1)
Redis安装与常用命令整合(1)
198 0