15 Star 31 Fork 8

wida / mycron

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
mycron.go 1.88 KB
一键复制 编辑 原始数据 按行查看 历史
wida 提交于 2016-11-07 16:40 . 去掉多进程过程
package main
import (
"cron"
"mycron"
"time"
"logger"
)
var(
processSet = mycron.NewSet() //当前正在跑的程序集合
log * logger.GwsLogger = logger.GetDeaultLogger(mycron.Log_file)
)
func main() {
jobs, _ := mycron.GetCronList()
c := cron.New()
defer func() {
c.Stop()
}()
//添加jobs
for i := 0; i < len(jobs); i++ {
job := jobs[i]
err := c.AddFunc(job.Time, func() {jobrun(job)}, int(job.Status), int(job.Id), job.STime, job.ETime)
if err != nil{
log.Error(err.Error())
}
}
//start
c.Start()
//@开启 "立即执行" 监听
go atonce()
for {
//监听更新事件
select {
case <-time.After(time.Second):
jobs, _ := mycron.GetModifyList()
for _,job:= range jobs{
err := c.AddFunc(job.Time, func() {jobrun(job)}, int(job.Status), int(job.Id), job.STime, job.ETime)
if err != nil{
log.Error(err.Error())
}
}
mycron.UpdateModifyList()
continue
}
}
}
//cron执行
func jobrun(job mycron.Job) {
defer func() {
if err := recover(); err != nil {
log.Error(err.(string));
processSet.Remove(job.Id)
}
}()
if job.Singleton == 1 && processSet.Has(job.Id) { // 如果是单例而且上次还非未退出
return
}
processSet.Add(job.Id)
job.Run()
processSet.Remove(job.Id)
}
//立即执行事件处理
func atonce() {
for {
//监听更新事件
select {
case <-time.After(time.Second):
jobs, _ := mycron.AtOnce()
for _, job := range jobs {
job.Run()
mycron.UpdateAtOnceList()
continue
}
}
}
}
Go
1
https://gitee.com/wida/mycron.git
git@gitee.com:wida/mycron.git
wida
mycron
mycron
mycron-1.0

搜索帮助