mirror of
https://github.com/rfyiamcool/cronlib.git
synced 2025-10-06 03:26:48 +08:00
add dynamic register
This commit is contained in:
70
README.md
70
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,44 +16,74 @@ 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"
|
||||
|
||||
"github.com/rfyiamcool/cronlib"
|
||||
)
|
||||
|
||||
var (
|
||||
cron = cronlib.New()
|
||||
)
|
||||
|
||||
func main() {
|
||||
handleClean()
|
||||
go start()
|
||||
|
||||
// cron already start, dynamic add job
|
||||
handleBackup()
|
||||
|
||||
select {}
|
||||
}
|
||||
|
||||
for srv, spec := range specList {
|
||||
tspec := spec // copy
|
||||
ssrv := srv // copy
|
||||
func start() {
|
||||
cron.Start()
|
||||
cron.Wait()
|
||||
}
|
||||
|
||||
// create job
|
||||
func handleClean() {
|
||||
job, err := cronlib.NewJobModel(
|
||||
spec,
|
||||
"*/5 * * * * *",
|
||||
func() {
|
||||
stdout(ssrv, tspec)
|
||||
pstdout("do clean gc action")
|
||||
},
|
||||
)
|
||||
if err != nil {
|
||||
panic(err.Error())
|
||||
}
|
||||
|
||||
// register srvName -> job
|
||||
err = cron.Register(srv, job)
|
||||
err = cron.Register("clean", job)
|
||||
if err != nil {
|
||||
panic(err.Error())
|
||||
}
|
||||
}
|
||||
|
||||
cron.Start()
|
||||
cron.Wait()
|
||||
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)
|
||||
}
|
||||
```
|
||||
|
||||
|
64
example/easy/easy.go
Normal file
64
example/easy/easy.go
Normal file
@@ -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)
|
||||
}
|
@@ -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()
|
||||
|
Reference in New Issue
Block a user