golang开发:环境篇go运行监控supervisord的使用(代码片段)

feixiangmanon feixiangmanon     2022-12-22     554

关键词:

为什么要使用Supervisord

17年第一次写Go项目的时候,用Go开发项目倒没没费多大劲,很快就开发完成了。到了在测试环境部署的时候,由于不知道有 Supervisord 这个软件,着实花了些功夫。总不能跟开发环境一样,直接执行编译生成的二进制文件吧,即使 后台执行了,万一它挂了,没人知道,即使测试人员发现了,开发还得登录到服务器再次启动下这个二进制文件。很明显这个解决方案没有任何意义,后来就在网上找解决方案。
然后,咨询Go开发的前同事,发现了Supervisord,喜出望外。它就是最优的解决方案啊。

Supervisord 是什么?
Supervisord 是用 Python 实现的一款非常实用的进程管理工具,supervisord 还要求管理的程序是非 daemon 程序,supervisord 会帮你把它转成 daemon 程序,因此如果用 supervisord 来管理 nginx 的话,必须在 nginx 的配置文件里添加一行设置 daemon off 让 nginx 以非 daemon 方式启动。
程序崩溃或者退出Supervisord会自动启动程序。这样就再不也不怕go的执行文件挂掉或者退出或者死掉,Supervisord只要监控到异常状态就会重启执行文件并且记录日志。

官方的解释
Supervisor: A Process Control System
Supervisor is a client/server system that allows its users to monitor and control a number of processes on UNIX-like operating systems.
It shares some of the same goals of programs like launchd, daemontools, and runit. Unlike some of these programs, it is not meant to be run as a substitute for init as “process id 1”. Instead it is meant to be used to control processes related to a project or a customer, and is meant to start like any other program at boot time.

它是进程控制系统。监控和控制 Unix系统上进程。

Supervisor 安装

当然是在我们的虚拟机中安装 Supervisor

sudo vagrant ssh
apt-get install supervisor

supervisorctl -h
supervisorctl -- control applications run by supervisord from the cmd line.
Usage: /usr/bin/supervisorctl [options] [action [arguments]]
Options:
-c/--configuration FILENAME -- configuration file path (default /etc/supervisord.conf)
-h/--help -- print usage message and exit
出现上面的帮助信息表示安装成功了

安装完成后,可以查看配置
vim /etc/supervisor/supervisord.conf
看到
[include]
files = /etc/supervisor/conf.d/*.conf
supervisord 监控的项目的配置必须部署到 /etc/supervisor/conf.d/目录下,
并且使用conf后缀

举个栗子

找个简单的Go Web的项目试试supervisor怎么监控软件运行的。
首先生成一个Go编译生成的二进制可执行文件
main.go

package main

import (
    "fmt"
    "net/http"
    "log"
)

func sayhelloName(w http.ResponseWriter, r *http.Request) 
    fmt.Fprintf(w, "Hello China!")


func main() 
    http.HandleFunc("/", sayhelloName)
    err := http.ListenAndServe(":9090", nil)
    if err != nil 
        log.Fatal("ListenAndServe: ", err)
    

编译生成可执行文件,测试下是否访问是否正常

go build -o test.gobin
./test.gobin
curl http://192.168.0.10:9090
Hello China!
说明Go Web是正常的

接下来我们用使用Supervisord监控这个Go web程序。
先看下Supervisord监控的软件的配置说明
[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信号,包括子进程

为上面我们生成 test.bin 的执行文件创建一个Supervisord监控的配置文件,配置文件必须在 /etc/supervisor/conf.d 目录下

cd  /etc/supervisor/conf.d
vim test.conf
[program:test]
command=/data/www/go/src/test/test.bin
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=/data/logs/test/test.log
stopasgroup=false
killasgroup=false

运行Supervisord,使之监控 test.gobin

添加了新的配置之后一定需要执行
supervisorctl update
会提示
test: added process group
表示test添加成功了。
查看执行状态
supervisorctl status
test                             RUNNING   pid 4354, uptime 0:00:16

这样表示运行成功了。
我们请求试下test.bin的服务是否正常。

curl http://192.168.0.10:9090
Hello China!
整个项目监控服务部署完成。

Supervisord 的常用命令

supervisorctl status 监控的程序的运行状态的列表
supervisorctl stop test 停止监控的程序
supervisorctl start test 启动监控的程序
supervisorctl restart test 重启监控的程序
supervisorctl update 更新监控的程序,如有新的配置添加一定要先执行update

想了解更多,当然查看官方文档。
http://supervisord.org/

vscode插件设置——golang开发环境配置

vscode设置proxy,配置vscode运行main.go文件,以及怎么配置vscode进行断点调试代码。vscode设置proxy,配置vscode运行main.go文件,以及怎么配置vscode进行断点调试代码。 查看详情

从零开始搭建easydarwin环境——windows系统开发环境golang的搭建(代码片段)

EasyDarwin在语言上服务端使用的是Golang,前端网页是Vue,因此我们需要有Golang和node的开发环境。上一篇我们介绍了Linux环境下的搭建,本章我们将说明一下如何在Windows下搭建起Golang环境。一、下载Go包Go的官方网站࿱... 查看详情

搭建go开发及调试环境(liteide+goclipse)--windows篇

...例,如果是32位环境需安装对应版本程序。 一、安装golang1.2.21.3及1.3.1编译生成的二进制文件,无法使用LiteIDE23.2携带的gdb7.7进行调试。二、安装及配置LiteIDE将liteidex23.2.windows.7z解压到D:即完成安装。 2.1设置编辑环境因为... 查看详情

go语言vscode开发环境搭建(代码片段)

Go版本:1.14.4系统:win10编辑器:VSCodegolang1.14版本发布已有一段时间,搜了一下网上之前的教程都已过时,所以整理了一篇最新的golang开发环境搭建教程。一、下载Go语言安装包到官网https://golang.google.cn/dl/下载最新安装包二、安... 查看详情

golang入门及开发环境配置(代码片段)

...件开发分布式/云计算开发开源框架:BeegoLrisRevelwin10配置Golang开发环境下载地址:https://golang.google.cn/关于环境变量配置:我下载的版本是1.13.5,把msi文件安装好之后自动添加了环境变量:测试是否安装成功:goversion集成开发环境... 查看详情

golang开发环境搭建-vim篇

Golang开发环境搭建-Vim篇转自:http://tonybai.com/2014/11/07/golang-development-environment-for-vim/虽说sublimetext3+gosublime+gocode是目前较为流行的Golang开发环境组合,但作为一名VIMer,没有一套得心应手的VimforGolangdev心里总是过不去的。Golang虽然... 查看详情

golang开发环境搭建(代码片段)

阅读目录Windows下搭建Go开发环境-安装和配置SDK检查GOPROXY非常重要Go开发编辑器VSCode介绍下载与安装安装go扩展第一个Go程序编译Windows下VSCode切换cmd.exe作为默认终端gorungoinstallWindows编译Linux可执行文件Linux编译Windows可执行文件Window... 查看详情

go开发和运行环境的配置

1.运行环境的下载、安装、配置:  下载:http://www.golangtc.com/download 官网下载经常被墙屏蔽,所以就从golang中国下载;  安装及其配置:http://jingyan.baidu.com/article/3c48dd3492fc1ee10be358d7.html2.IDE:Sublimetext3  安装及其使用3.版本... 查看详情

golang开发环境(2016.9.16)

一.windows下安装1.下载go1.6.3.windows-amd64.msi,建议默认安装到‘C:Go’(最新版本1.7.1不支持IDEA调试)2.环境变量变量值说明GOROOTC:Go安装程序默认会设置,如果用zip方式安装则手动设置PathC:Goin安装程序默认会设置,如果用zip方式... 查看详情

golang开发环境搭建(代码片段)

...配置SDKSDK就是软件开发工具包Go官网下载地址:https://golang.org/dl/Go官方镜像站(推荐):https://golang.google.cn/dl/此安装实例以64位Win10系统安装Go1.19.3可执行文件版本为例。下一步,下一步安装,记住安装目录... 查看详情

golang安装开发环境配置(代码片段)

本机系统:fedora28step1百度搜索golang到go语言中文网,下载golang包,如果是linux系统可以直接点击此连接,也可去go语言中文网,https://studygolang.com/dl/golang/go1.11.linux-amd64.tar.gz有安装说明可以看,如果懒的看就:tar-C/usr/local-xzfxxx.tar.gz... 查看详情

golang的特点开发工具vscode安装go语言开发环境配置实现一个go程序(代码片段)

关于Golanggolang是RobPike及KenThompson开发的一种静态强类型、编译并发型、开源的编程语言,支持数据处理和大并发处理能力,支持垃圾回收功能,兼顾C语言的编译速度和python语言的简洁高效,继承了C语言的很多理念,引入了包的... 查看详情

golang入门一之开发环境配置(代码片段)

一:golang下载地址https://studygolang.com/dl二:环境变量配置1,Linuxvim/etc/profile.d/go.sh#新建环境变量文件,输入以下内容exportGOROOT=/opt/go#安装目录exportGOPATH=/opt/gopath#项目目录exportPATH=$PATH:$GOROOT/binexportGOPROXY=https://mirrors.aliyun.com/goproxy/#使用... 查看详情

linux系统之部署go语言开发运行环境(代码片段)

...行文件4.测试运行一、Go语言介绍1.Go语言简介Go(又称Golang)是Google开发的一种静态强类型、编译型、并发型,并具有垃圾回收功能的编程语言。2.Go语言的撰写风格每行程序结束后不需要撰写分号。左大括号不能够换... 查看详情

阿里云搭建go开发环境

...的可能会失败,这里用国内一个论坛的wgethttps://dl.gocn.io/golang/1.8.4/go1.8.4.linux-amd64.tar.gz#解压tar-zxvfgo1.8.4.linux-amd64.tar.g 查看详情

编程语言之intellij搭建golang开发环境

1.File->Settings->Plugins->Browserepositories,输入Go查询,看右侧说明确认是正确的go插件即可安装打开File->Settings->Languages&Frameworks,里面会多出Go的设置菜单2.新建project工程,默认即可右键test.ho,选择“Run‘test.go‘”即可... 查看详情

go环境的安装~

Golang环境搭建Golanggithub地址:https://github.com/golang/goGolang的环境下载:https://golang.org/dl/安装过程就是next..next..next...finish...如果需要选择安装到其他路径下,在选择安装目录那里调一下路径就好了~安装完成以后,进入cmd的命令行... 查看详情

centos7.3安装go运行和开发环境

下载并解压  下载  wget-chttps://storage.googleapis.com/golang/go1.10.3.linux-amd64.tar.gz  解压    将源码包解压后直接放到/usr/local目录下,不用再次make&&makeinstall来安装了,开箱即用tar-C/usr/local/-zxvfgo1.8.3.linux-amd64.tar.gz添加系... 查看详情