package main import ( "fmt" "os" "os/exec" "path/filepath" "strings" "sync" "time" "github.com/sirupsen/logrus" ) const ( diffTime = 3600 * 24 * 3 MaxErrorMinutes = 20 ) type MonitorStatus struct { MQTTMessageHandle time.Time MQTTConnectMgr time.Time } var mypath = [...]string{"/usr/app/ipole/log/", "/usr/app/camera/log/", "/usr/app/its/log/"} var _once1 sync.Once var _single1 *MonitorStatus func GetMonitorStatus() *MonitorStatus { _once1.Do(func() { _single1 = &MonitorStatus{ MQTTMessageHandle: time.Now(), MQTTConnectMgr: time.Now(), } }) return _single1 } func (o *MonitorStatus) GetMonitorRunStatus() bool { t1 := time.Since(o.MQTTConnectMgr).Minutes() t2 := time.Since(o.MQTTMessageHandle).Minutes() return int(t1) < MaxErrorMinutes && int(t2) < MaxErrorMinutes } func runInLinux(cmd string) (string, error) { result, err := exec.Command("/bin/sh", "-c", cmd).Output() if err != nil { return "", err } return strings.TrimSpace(string(result)), err } // CheckProRunning 根据进程名判断进程是否运行 func CheckProRunning(serverName string) (bool, error) { a := "ps |grep " + serverName str, err := runInLinux(a) if err != nil { return false, err } logrus.Info("ps len", len(str), str) return len(str) > 30, nil } func CheckAndDeleteLogfile() { for _, v := range mypath { getFilelist(v) } } func getFilelist(path string) { nowTime := time.Now().Unix() err := filepath.Walk(path, func(path string, f os.FileInfo, err error) error { if f == nil { return err } fileTime := f.ModTime().Unix() if (nowTime-fileTime) > diffTime && !strings.ContainsAny(strings.TrimSuffix(f.Name(), ".log"), "abcdefghijkmlnopqrstuvwxyz") { //判断文件是否超过3天 fmt.Printf("Delete file %v !\r\n", path) os.RemoveAll(path + "/" + f.Name()) } return nil }) if err != nil { logrus.Infof("filepath.Walk() returned %v\r\n", err) } }