Supervisor监控Go程序

news2025/1/11 9:56:57

目的:

线上服务有时候会由于一些bug导致painc,程序终止,这个时候需要自动重启项目,让项目能继续提供服务。

容器启动Golang项目

vscode安装golang插件,让vscode可以运行go代码

提示没有go环境,服务器本地确实是没有go环境,因为平时都是直接跑在容器里面

vscode如何直接到容器呢?直接安装一个docker插件

VsCode轻松使用docker容器-Remote Containers - 掘金

然后就可以直接看到服务器里面的所有的容器和镜像了

现在我们就可以直接操作容器了,但是这和我想象的不太一样,我本来是想可视化容器里面的代码,直接可以用vscode编辑,原因是找不到这个插件

我们需要在容器里面安装一下supervisor 

如何安装supervisor?参考这个教程即可

安装 - Supervisor文档 - RD文档

过慢可以使用镜像 

pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple superviso

但是使用上面的教程的话,先安装一下python环境

直接使用yum安装python,不然容易出错

yum安装python3-掘金

根据上面的步骤安装成功,默认安装在 /usr/local/bin 目录下

我们也可以通过  which supervisord 查看

根据上面的安装步骤安装完成之后,配置文件已经拷贝到了/etc/supervisord.conf

要运行的go二进制文件如下

package main

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

// w表示response对象,返回给客户端的内容都在对象里处理
// r表示客户端请求对象,包含了请求头,请求参数等等
func index(w http.ResponseWriter, r *http.Request) {
	// 往w里写入内容,就会在浏览器里输出
	fmt.Fprintf(w, "Hello golang http!")
}

func main() {
	// 设置路由,如果访问/,则调用index方法
	http.HandleFunc("/", index)

	// 启动web服务,监听9090端口
	err := http.ListenAndServe(":9090", nil)
	if err != nil {
		log.Fatal("ListenAndServe: ", err)
	}
}

执行go build test.go ,会生成一个二进制文件test 

vim /etc/supervisor.conf

在我们的安装目录下面,执行这个命令

./supervisord -c /etc/supervisord.conf

查看supervisord是否成功启动

ps aux | grep "super"

第一行表示启动成功,第二行不用管,第二行是ps aux | grep "super" 这个命令的情况,执行后立即就死掉了

查看9090端口是否有服务启动、杀死进程、启动进程

可以看到,test自动启动,而且pid也变了

查看一下supervisor的日志记录在什么地方

cat /etc/supervisord.conf | grep "logfile"

查看日志文件

tail -n 10 /tmp/supervisord.log

成功!

设置开启自启动

Supervisor进程管理&开机自启 - 简书

重启一下容器

进入容器后发现没有生效

可能原因是:Failed to get D-Bus connection: Operation not permitted

这个是容器的限制,容器内执行报错,容器外执行就可以。设置容器自启动一些东西还是有些问题的,有一个方式是,编写dockerfile,在dockerfile中添加一行命令,可以让容器自动执行脚本

思考:虽然成功启动了项目,但是如果项目启动之后再次执行到bug,再次崩溃了,还是要继续重启,这个过程中,程序员如果不看supervisor得日志,是无法得知项目已经出现问题了。 

如何才能让supervisor启动的时候,通知一下程序员呢?后续研究后再写一篇博客解答。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1100092.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AMEYA360:君正低功耗AIoT图像识别处理器—X1600/X1600E

• 高性能 XBurst 1 CPU,主频1.0GHz • 超低功耗 • 内置LPDDR2(X1600:32MB,X1600E:64MB) • 实时控制核XBurst 0,面向安全管理和实时控制 • 丰富的外设接口 应用领域 • 基于二维码的智能商业 • 智能物联网 • 高端…

Leetcode刷题详解——有效三角形的个数

1.题目链接:有效三角形的个数 2.题目描述: 给定一个包含非负整数的数组 nums ,返回其中可以组成三角形三条边的三元组个数。 示例 1: 输入: nums [2,2,3,4] 输出: 3 解释:有效的组合是: 2,3,4 (使用第一个 2) 2,3,4 (使用第二个 2) 2,2,3示…

【数据可视化】—大屏数据可视化展示

【数据可视化】—大屏数据可视化展示 一、数据可视化 数据可视化的目的:借助于图形化工具,清晰有效的传达与沟通信息。 数据可视化可以把数据从冰冷的数字转换成图形,揭示蕴含在数据中的规律和道理。 二、 免费数据可视化库 Echarts 百度…

7-k8s-helm管理

文章目录 一、为什么需要Helm二、Helm相关概念介绍三、Helm安装四、Helm指令介绍五、Helm创建tomcat六、Helm创建tomcat其他方式七、Helm创建redis 一、为什么需要Helm k8s部署:k8s平台部署的服务都是由资源文件描述组成,传统的k8s部署应用需要手工编排…

过拟合与过拟合的经典例子

本站原创文章,转载请说明来自 《老饼讲解-机器学习》 ml.bbbdata.com 过拟合是机器学习中最常遇到的问题,本文解析什么叫过拟合 01. 什么是过拟合 本节通过概念解析与可视化例子,讲述什么是过拟合 什么是过拟合 过拟合是指在由于过度拟…

16 - 多线程调优(下):如何优化多线程上下文切换?

通过上一讲的讲解,相信你对上下文切换已经有了一定的了解了。如果是单个线程,在 CPU 调用之后,那么它基本上是不会被调度出去的。如果可运行的线程数远大于 CPU 数量,那么操作系统最终会将某个正在运行的线程调度出来,…

4.3 划分子网和构造超网

思维导图: 4.3.1 划分子网 **4.3 划分子网和构造超网笔记:** --- **4.3.1 划分子网** **1. 两级IP地址到三级IP地址的转变:** **关键点:** - **问题背景:** 早期的ARPANET对IP地址的设计存在不足: 1…

python 之f-strings 来格式化字符串

文章目录 当使用 f-strings 来格式化字符串时,可以在字符串中嵌入变量的值以及其他表达式的结果。以下是一些示例: 基本用法: name "Alice" age 30print(f"My name is {name} and I am {age} years old.")输出&#…

树莓派和arduino的恩恩怨怨

一、负责与树莓派互动的putty的会话经常断,不爽: 参考:【SSH】SSH自动断开连接的原因和解决办法|SSH保持长连接方法_ssh连上几秒就断开了_bandaoyu的博客-CSDN博客 用nano 1、修改 /etc/profile中改MOUT的值:export TMOUT0 ec…

Linux常见的指令合集

Linux指令合集 认识linuxlinux基础指令1.pwd 命令2. ls 命令3.cd 命令4. man 命令5. grep 命令6. ps 命令7. kill 命令8. netstat 命令9. date 查看当前系统时间10. echo 打印选项 -e linux文件操作指令1. mkdir 命令2. rmdir 命令3. touch 命令4. rm 命令5. mv 命令6. cp 命令…

【文件IO】文件系统的操作 流对象 字节流(Reader/Writer)和字符流 (InputStream/OutputStream)的用法

目录 1.文件系统的操作 (File类) 2.文件内容的读写 (Stream流对象) 2.1 字节流 2.2 字符流 2.3 如何判断输入输出? 2.4 reader读操作 (字符流) 2.5 文件描述符表 2.6 Writer写操作 (字符流) 2.7 InputStream (字节流) 2.8 OutputStream (字节流) 2.9 字节…

使用html2canvas将html转pdf,由于table表的水平和竖直有滚动条导致显示不全(或者有空白)

结果: 业务:将页面右侧的table打印成想要的格式的pdf,首先遇到的问题是table表上下左右都有滚轮而html2canvas相当于屏幕截图,那滚动区域如何显示出来是个问题? gif有点模糊,但是大致功能可以看出 可复制…

基于双级阈值及过零率的语音激活检测(VAD)

语音激活检测(Voice Activity Detection, VAD):也称为端点检测,目的就是要找到音频信号的开始和结束位置。 时域方法: 音量:只用音量来进行端点检测,是最简单的方法,但是会对清音造成误判。音…

C#,数值计算——分类与推理Gaumixmod的计算方法与源程序

1 文本格式 using System; using System.Collections.Generic; namespace Legalsoft.Truffer { public class Gaumixmod { private int nn { get; set; } private int kk { get; set; } private int mm { get; set; } private double…

力扣第17题 电话号码的字母组合 c++ 回溯 经典提升题

题目 17. 电话号码的字母组合 中等 相关标签 哈希表 字符串 回溯 给定一个仅包含数字 2-9 的字符串,返回所有它能表示的字母组合。答案可以按 任意顺序 返回。 给出数字到字母的映射如下(与电话按键相同)。注意 1 不对应任何字母。…

Elasticsearch系列组件:Logstash强大的日志管理和数据分析工具

Elasticsearch 是一个开源的、基于 Lucene 的分布式搜索和分析引擎,设计用于云计算环境中,能够实现实时的、可扩展的搜索、分析和探索全文和结构化数据。它具有高度的可扩展性,可以在短时间内搜索和分析大量数据。 Elasticsearch 不仅仅是一个…

sqlserver系统存储过程添加用户学习

sqlserver有一个系统存储过程sp_adduser;从名字看是添加用户的;操作一下, 从错误提示看还需要先添加一个登录名,再执行一个系统过程sp_addlogin看一下, 执行完之后看一下,安全性-登录名下面有了rabbit&…

【ARM Coresight Debug 系列 -- Linux 断点 BRK 中断使用详细介绍】

文章目录 1.1 ARM BRK 指令1.2 BRK 立即数宏定义介绍1.3 断点异常处理流程1.3.1 el1_sync_handler1.3.2 el1_dbg 跟踪 1.4 debug 异常处理函数注册1.4.1 brk 处理函数的注册 1.1 ARM BRK 指令 ARMv8 架构的 BRK 指令是用于生成一个软件断点的。当处理器执行到 BRK 指令时&…

电脑办公助手之桌面便签,助力高效率办公

在现代办公的快节奏中,大家有应接不暇的工作,每天面对着复杂的工作任务,总感觉时间不够用,而且工作无厘头。对于这种状态,大家可以选择在电脑上安装一款好用的办公便签软件来辅助日常办公。 敬业签是一款专为办公人士…

android--屏幕适配

基础概念 像素密度 dpi ( √宽^2高^2 ) / 屏幕大小 手机分辨率 1080 * 1920 1080代表宽 1920代表高 单位为px像素 屏幕大小为英寸 标准的像素密度 mdpi 160dpi dp 密度无关像素 dp与px的转换 density (dpi / 16…