diff --git a/README.md b/README.md index f59b0c9..ea397b8 100644 --- a/README.md +++ b/README.md @@ -2,9 +2,7 @@ Cronlib is easy golang crontab library, support parse crontab and schedule cron jobs. -**tks** - -cron_parser.go import https://github.com/robfig/cron/blob/master/parser.go , thank @robfig +cron_parser.go import `https://github.com/robfig/cron/blob/master/parser.go`, thank @robfig ## Feature @@ -18,45 +16,75 @@ cron_parser.go import https://github.com/robfig/cron/blob/master/parser.go , tha ## Usage +see more [example](github.com/rfyiamcool/example) + ### quick run ```go -func run() error { - cron := cronlib.New() +package main - specList := map[string]string{ - "risk.scan.total.1s": "*/1 * * * * *", - "risk.scan.total.2s": "*/2 * * * * *", - "risk.scan.total.3s": "*/3 * * * * *", - "risk.scan.total.4s": "*/4 * * * * *", - "risk.scan.total.5s.to.3s": "*/5 * * * * *", - } +import ( + "log" - for srv, spec := range specList { - tspec := spec // copy - ssrv := srv // copy + "github.com/rfyiamcool/cronlib" +) - // create job - job, err := cronlib.NewJobModel( - spec, - func() { - stdout(ssrv, tspec) - }, - ) - if err != nil { - panic(err.Error()) - } +var ( + cron = cronlib.New() +) - // register srvName -> job - err = cron.Register(srv, job) - if err != nil { - panic(err.Error()) - } - } +func main() { + handleClean() + go start() + // cron already start, dynamic add job + handleBackup() + + select {} +} + +func start() { cron.Start() cron.Wait() } + +func handleClean() { + job, err := cronlib.NewJobModel( + "*/5 * * * * *", + func() { + pstdout("do clean gc action") + }, + ) + if err != nil { + panic(err.Error()) + } + + err = cron.Register("clean", job) + if err != nil { + panic(err.Error()) + } +} + +func handleBackup() { + job, err := cronlib.NewJobModel( + "*/5 * * * * *", + func() { + pstdout("do backup action") + }, + ) + if err != nil { + panic(err.Error()) + } + + err = cron.DynamicRegister("backup", job) + if err != nil { + panic(err.Error()) + } +} + +func pstdout(srv string) { + log.Println(srv) +} ``` ### set job attr diff --git a/example/easy/easy.go b/example/easy/easy.go new file mode 100644 index 0000000..075eb95 --- /dev/null +++ b/example/easy/easy.go @@ -0,0 +1,64 @@ +package main + +import ( + "log" + + "github.com/rfyiamcool/cronlib" +) + +var ( + cron = cronlib.New() +) + +func main() { + handleClean() + go start() + + // dynamic add + handleBackup() + + select {} +} + +func start() { + cron.Start() + cron.Wait() +} + +func handleClean() { + job, err := cronlib.NewJobModel( + "*/5 * * * * *", + func() { + pstdout("do clean gc action") + }, + ) + if err != nil { + panic(err.Error()) + } + + err = cron.Register("clean", job) + if err != nil { + panic(err.Error()) + } +} + +func handleBackup() { + job, err := cronlib.NewJobModel( + "*/5 * * * * *", + func() { + pstdout("do backup action") + }, + ) + if err != nil { + panic(err.Error()) + } + + err = cron.DynamicRegister("backup", job) + if err != nil { + panic(err.Error()) + } +} + +func pstdout(srv string) { + log.Println(srv) +} diff --git a/example/run.go b/example/hard/hard.go similarity index 100% rename from example/run.go rename to example/hard/hard.go diff --git a/example/simple.go b/example/multi/multi.go similarity index 87% rename from example/simple.go rename to example/multi/multi.go index 2597516..3a4e21b 100644 --- a/example/simple.go +++ b/example/multi/multi.go @@ -11,8 +11,8 @@ func main() { cron := cronlib.New() specList := map[string]string{ - "risk.scan.total.per.5s": "*/5 * * * * *", - "risk.scan.total.min.0s": "0 * * * * *", + "risk.scan.total.per.5s": "*/5 * * * * *", + "risk.scan.total.min.0s": "0 * * * * *", "risk.scan.total.per.30s": "*/30 * * * * *", } diff --git a/example/parse_next_time.go b/example/parse_time/parse_next_time.go similarity index 100% rename from example/parse_next_time.go rename to example/parse_time/parse_next_time.go diff --git a/scheduler.go b/scheduler.go index a2ad9d0..7b977a7 100644 --- a/scheduler.go +++ b/scheduler.go @@ -75,6 +75,11 @@ func (c *CronSchduler) UpdateJobModel(srv string, model *JobModel) error { return c.reset(srv, model, false, true) } +// DynamicRegister - after cronlib already run, dynamic add a job, the job autostart by cronlib. +func (c *CronSchduler) DynamicRegister(srv string, model *JobModel) error { + return c.reset(srv, model, false, true) +} + // reset - reset srv model func (c *CronSchduler) reset(srv string, model *JobModel, denyReplace, autoStart bool) error { c.Lock()