一、介绍Supervisord软件
1、什么是Supervisord?
Supervisord是一个非常优秀的进程管理工具,使用Python开发。它可以在类UNIX系统的方式让用户来准确地监视和控制后台一定数量的服务进程。并作为一个天使进程让后台进程在当发生内部错误退出、或者进程被意外杀死时自动重启。除此之外,supervisord可以监控TCP端口,让其他主机通过客户端了命令supervisorctl通过HTTP协议直接对Server端进程进行启停,避免让进程/服务器管理者直接接触Shell或root用户。进程之间也有一个优先级和进程组关系,让管理员使用start all和stop all的关系来启动。

2、安装Supervisord软件

[root@yyljxl ~]# cat /etc/redhat-release
CentOS Linux release 7.x

[root@www ]# yum -y install supervisor
[root@yyljxl ~]# supervisorctl -h
supervisorctl -- control applications run by supervisord from the cmd line.

Usage: /usr/bin/supervisorctl [options] [action [arguments]]

Options:
-c/--configuration -- configuration file path (default /etc/supervisord.conf)
-h/--help -- print usage message and exit
-i/--interactive -- start an interactive shell after executing commands
-s/--serverurl URL -- URL on which supervisord server is listening
(default "http://localhost:9001").
-u/--username -- username to use for authentication with server
-p/--password -- password to use for authentication with server
-r/--history-file -- keep a readline history (if readline is available)

action [arguments] -- see below

Actions are commands like "tail" or "stop". If -i is specified or no action is
specified on the command line, a "shell" interpreting actions typed
interactively is started. Use the action "help" to find out about available
actions.
出现上面的帮助信息表示安装成功了。

#启动服务
systemctl start supervisord
systemctl enable supervisord
systemctl status supervisord

#supervisord监控的软件的配置说明
vim /etc/supervisor/conf.d
[program:项目名]
command=/data/www/go/src/test/test.bin
程序启动命令
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 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
stdout_logfile=/data/logs/test/test.log
日志输出的文件地址
stopasgroup=false
默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程
killasgroup=false
默认为false,向进程组发送kill信号,包括子进程。

#官方文档
http://supervisord.org/

3、使用案例
示例:编写一个简单的go web项目
[root@web scripts]# cat mail.go
package main

import (
"fmt"
"net/http"
)

//w, 给客户端回复数据
//r, 读取客户端发送的数据
func HandConn(w http.ResponseWriter, r *http.Request) {
fmt.Println("r.Method = ", r.Method)
fmt.Println("r.URL = ", r.URL)
fmt.Println("r.Header = ", r.Header)
fmt.Println("r.Body = ", r.Body)

w.Write([]byte("hello go")) //给客户端回复数据
}

func main() {
//注册处理函数,用户连接,自动调用指定的处理函数
http.HandleFunc("/", HandConn)

//监听绑定
http.ListenAndServe(":8000", nil)
}

#上传程序到Centos7.x系统
yum install go -y

#build程序
[root@yyljxl scripts]# go build -o test

#生成可执行文件
[root@yyljxl scripts]# ll
total 6416
-rw-r--r-- 1 root root 542 Jun 24 09:15 mail.go
-rwxr-xr-x 1 root root 6562362 Jun 24 09:37 test

#运行程序
[root@yyljxl scripts]# nohup ./test &
[1] 14132
[root@yyljxl scripts]# nohup: ignoring input and appending output to ‘nohup.out’

#查看进程
[root@yyljxl ~]# netstat -lntup
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp6 0 0 :::8000 :::* LISTEN 14132/ ./test

4、配置test程序用supervisord监控
[root@www scripts]#
mkdir -p /nulige/scripts/logs
touch /nulige/scripts/logs/test.log
#配置supervisor监控test
cat > /etc/supervisord.d/test.ini <<EOF
[program:test]
command=/nulige/scripts/test
autostart=true
startsecs=10
autorestart=true
startretries=3
user=root
priority=999
redirect_stderr=true
stdout_logfile_maxbytes=20MB
stdout_logfile_backups = 20
stdout_logfile=/nulige/scripts/logs/test.log
stopasgroup=false
killasgroup=false
EOF

#执行命令
[root@yyljxl scripts]# supervisorctl update
test: added process group
[root@yyljxl scripts]# supervisorctl status
test RUNNING pid 15214, uptime 0:00:09

#端口占用,导致没有载入成功,kill掉原端口程序,再重新载入
[root@yyljxl scripts]# supervisorctl status
test FATAL Exited too quickly (process log may have details)

#重新载入
[root@yyljxl scripts]# supervisorctl reload
Restarted supervisord

#更新监控的程序
[root@yyljxl scripts]# supervisorctl update

#查看运行状态
[root@yyljxl scripts]# supervisorctl status
test RUNNING pid 15214, uptime 0:00:09

#停止服务
[root@yyljxl scripts]# supervisorctl stop test
test: stopped

#测试杀当前程序的pid,再观察pid变化。

#查看进程
[root@yyljxl ~]# netstat -lntup
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp6 0 0 :::8000 :::* LISTEN 15385/test #杀进程
[root@yyljxl ~]# kill 15385
[root@yyljxl ~]# kill 15385
-bash: kill: (15385) - No such process #查看进程,发现PID已变化,说明监控成功,服务停止后,会自启动。
[root@yyljxl ~]# netstat -lntup
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp6 0 0 :::8000 :::* LISTEN 15416/test

5、supervisord常用命令

supervisorctl status #监控的程序的运行状态的列表
supervisorctl stop test #停止监控的程序
supervisorctl start test #启动监控的程序
supervisorctl restart test #重启监控的程序
supervisorctl update #更新监控的程序,如有新的配置添加一定要先执行update
supervisorctl reload #载入最新的配置文件,并按新的配置启动、管理所有进程。

使用Supervisord软件管理go服务进程的更多相关文章

  1. linux软件管理之------编译安装nginx服务器并手动编写自动化运行脚本

    红帽系列的 linux软件管理分为三类:1. rpm 安装软件.2. yum 安装软件.3. 源码包编译安装.前面两种会在相关专题给出详细讲解.源码包的编译安装是非常关键的,我们知道linux的相关版 ...

  2. XC软件管理器应用

    这是一个基于android 4.4开发的android应用-XC软件管理器.包含应用的信息查看,打开应用以及应用的卸载等功能.非常实用的一个应用,欢迎大家下载使用. 下载地址:http://downl ...

  3. IT软件管理人员的职业路线(从技术经理到总经理) - CEO之公司管理经验谈

    技术.业务和管理永远是工作的一个话题.笔者今天就根据自身的经验,通过这三个方面介绍下IT软件管理人员的职业路线.前面写过一个文(IT软件技术人员的职位路线(从程序员到技术总监) - 部门管理经验谈), ...

  4. Debian系列软件管理(第二版)

    Debian系列软件管理 1.搜索软件包信息 apt-cache search apt-cache search yum 2.查看软件包信息 apt-cache show rpm 3.安装软件 apt ...

  5. RedHat系列软件管理(第二版) --脚本安装

    RedHat系列软件管理 --脚本安装 一.解压缩 tar -zxvf webmin-1.700.tar.gz 二.进入相关目录 cd webmin-1.700 三.如果此时执行./configure ...

  6. RedHat系列软件管理(第二版) --源码包安装

    RedHat系列软件管理 --源码包安装 源码包特点: 拥有广泛的平台支持性,可以装在所有的类UNIX操作系统上,不用考虑CPU架构. 灵活性,可以在安装过程中指定特有的选项. 定制度非常高,可以自己 ...

  7. RedHat系列软件管理(第二版) --二进制软件包管理

    RedHat系列软件管理 --二进制软件包管理 Linux学习思想-Linux相对与Windows来非常透明,因此,无论是系统,还是软件,都会有本身自带,或者是Man给提供的非常详细的说明/帮助文档, ...

  8. 末学者笔记--rpm和yum软件管理(Linux)

    一.rpm简介 这是一个数据库管理工具,可以通过读取数据库,判断软件是否已经安装,如果已经安装可以读取出来所有文件的所在位置等,并可以实现删除这些文件. rpm:RPM is Redhat Packa ...

  9. rpm和yum软件管理

    rpm简介 数据库管理工具,通过读取数据库,判断软件是否安装,如已安装可读取出来所有文件的所在位置等,并可以实现删除这些文件. rpm:RPM is Redhat Package Manager(递归 ...

随机推荐

  1. rhel7学习第四天

    学习<Linux就该这么学>第二周,学习了最重要的几个文件操作命令

  2. Mysql数据库之备份还原(mysqldump,LVM快照,select备份,xtrabackup)

    备份类型: 热备份:读写不受影响 温备份:仅可执行读备份 冷备份:离线备份,读写均不能执行,关机备份 物理备份和逻辑备份 物理备份:复制数据文件,速度快. 逻辑备份:将数据导出之文本文件中,必要时候, ...

  3. 接口自动化--数据驱动(ddt)

    上次我们提到了unittest单元测试框架,运用单元测试框架unittest进行编写测试用例 但是遇到了一个问题,就是难道我一个测试点中有多个测试用例,我要每一个都要去编写一条测试用例嘛?这实在是太复 ...

  4. Docker安装Redis4.0

    docker pull redis:4.0 拉取Redis4.0镜像 docker images 查看本地的镜像 mkdir -p /root/redis4.0/data 在宿主机创建数据文件目录 w ...

  5. log4j配置每天生成一个日志文件

    首先需要配置web.xml里面: <servlet-name>log4j-init</servlet-name> <servlet-class>com.free.c ...

  6. Nginx对图片进行防盗链

    这里需要使用两台Linux主机(一台充当防盗链服务器,一台充当盗链服务器),下表是它们所使用的操作系统以及IP地址. 两台Linux主机所使用的操作系统以及IP地址 主机名称 操作系统 IP地址 防盗 ...

  7. 09-C#笔记-循环

    1. while 同 C++ 2. for 同 C++ 3. foreach,注意数组的定义 int[] fibarray = new int[] { 0, 1, 1, 2, 3, 5, 8, 13 ...

  8. VSS 使用方法

    VSS 的全称为 Visual Source Safe .作为 Microsoft Visual Studio 的一名成员,它主要任务就是负责项目文件的管理,几乎可以适用任何软件项目.管理软件开发中各 ...

  9. 五个goland进行go开发的小技巧

    五个goland进行go开发的小技巧 本文译自5 Tips To Speed Up Golang Development With IntelliJ Or Goland 确实很实用. 1. 实现int ...

  10. sqlyog 下载

    https://www.cnblogs.com/givemelove/p/7777975.html