/* * @Author: haodaquan * @Date: 2017-06-21 12:55:19 * @Last Modified by: haodaquan * @Last Modified time: 2017-06-21 13:03:06 */ package jobs import ( "fmt" "github.com/astaxie/beego" "github.com/george518/PPGo_Job/models" "os/exec" "time" ) func InitJobs() { list, _ := models.TaskGetList(1, 1000000, "status", 1) for _, task := range list { job, err := NewJobFromTask(task) if err != nil { beego.Error("InitJobs:", err.Error()) continue } AddJob(task.CronSpec, job) } } func runCmdWithTimeout(cmd *exec.Cmd, timeout time.Duration) (error, bool) { done := make(chan error) go func() { done <- cmd.Wait() }() var err error select { case <-time.After(timeout): beego.Warn(fmt.Sprintf("任务执行时间超过%d秒,进程将被强制杀掉: %d", int(timeout/time.Second), cmd.Process.Pid)) go func() { <-done // 读出上面的goroutine数据,避免阻塞导致无法退出 }() if err = cmd.Process.Kill(); err != nil { beego.Error(fmt.Sprintf("进程无法杀掉: %d, 错误信息: %s", cmd.Process.Pid, err)) } return err, true case err = <-done: return err, false } }