【go实现进程监控并启动】弓背霞明剑照霜,秋风走马出咸阳。这篇文章主要讲述go实现进程监控并启动相关的知识,希望能为你提供帮助。
一个简单的实现进程监控命令
package main
import "fmt"
import "strings"
import "net/http"
import "os/exec"
import "time"
func SendDingMsg(msg string) {
//请求地址模板
webHook := `https://oapi.dingtalk.com/robot/send?access_token=xxxx` //填写钉钉token
content := `{"msgtype": "text",
"text": {"content": "`+ msg + `"}
}`
//创建一个请求
req, err := http.NewRequest("POST", webHook, strings.NewReader(content))
if err != nil {
fmt.Println(err)
}client := &
http.Client{}
//设置请求头
req.Header.Set("Content-Type", "application/json;
charset=utf-8")
//发送请求
resp, err := client.Do(req)
//关闭请求
defer resp.Body.Close()if err != nil {
// handle error
fmt.Println(err)
}
}func runInLinux(cmd string) (string, error) {
//fmt.Println("Running Linux cmd:" + cmd)
result, err := exec.Command("/bin/sh", "-c", cmd).Output()
if err != nil {
return "", err
}
return strings.TrimSpace(string(result)), err
}
func CheckAllProRunning(){
cmd := `xxxx`检查命令
start := `xxxxx`启动命令
pid ,err := runInLinux(cmd)
fmt.Println(pid,err)
if pid == ""{
fmt.Println("进程不存在的!!!")
SendDingMsg("项目:进程不存在的,已经开始重启")
pid2,_ := runInLinux(start)
if pid2 != ""{
fmt.Println("进程启动成功!!!")
SendDingMsg("项目:已经重启成功!!!")
}
}}
func MonitorAllProRunning(){
for{
CheckAllProRunning()
time.Sleep(60 * time.Second) //定义多长时间检查一次
}
}
func main(){
defer func() {
if err := recover();
err != nil {
fmt.Println("程序异常!!!")
}
}()
MonitorAllProRunning()}
打包并启动
go build checkprocess.go
nohup ./checkprocess &
推荐阅读
- Java详解注释&关键字&常量&变量&标识符
- .NET 5 支持 Azure Functions OpenAPI 扩展啦
- 一个不起眼却非常实用的功能介绍
- 性能环境之docker操作指南3(全网最全)
- 一起玩转树莓派(12)——U型光电传感器
- 华为音频编辑服务带你一键伴奏分离!
- 记一次pg_rman备份postgresql数据库报段错误的处理过程
- win7系统端口139与455关闭可有效果保护电脑安全
- win7系统如何不待机 设置Win7不待机的技巧