一个简单的实现进程监控命令
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 &