mirror of
https://github.com/rfyiamcool/cronlib.git
synced 2025-10-05 19:16:49 +08:00
add dynamic register
This commit is contained in:
72
README.md
72
README.md
@@ -2,9 +2,7 @@
|
|||||||
|
|
||||||
Cronlib is easy golang crontab library, support parse crontab and schedule cron jobs.
|
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
|
## Feature
|
||||||
|
|
||||||
@@ -18,44 +16,74 @@ cron_parser.go import https://github.com/robfig/cron/blob/master/parser.go , tha
|
|||||||
|
|
||||||
## Usage
|
## Usage
|
||||||
|
|
||||||
|
see more [example](github.com/rfyiamcool/example)
|
||||||
|
|
||||||
### quick run
|
### quick run
|
||||||
|
|
||||||
```go
|
```go
|
||||||
func run() error {
|
package main
|
||||||
cron := cronlib.New()
|
|
||||||
|
|
||||||
specList := map[string]string{
|
import (
|
||||||
"risk.scan.total.1s": "*/1 * * * * *",
|
"log"
|
||||||
"risk.scan.total.2s": "*/2 * * * * *",
|
|
||||||
"risk.scan.total.3s": "*/3 * * * * *",
|
|
||||||
"risk.scan.total.4s": "*/4 * * * * *",
|
|
||||||
"risk.scan.total.5s.to.3s": "*/5 * * * * *",
|
|
||||||
}
|
|
||||||
|
|
||||||
for srv, spec := range specList {
|
"github.com/rfyiamcool/cronlib"
|
||||||
tspec := spec // copy
|
)
|
||||||
ssrv := srv // copy
|
|
||||||
|
|
||||||
// create job
|
var (
|
||||||
|
cron = cronlib.New()
|
||||||
|
)
|
||||||
|
|
||||||
|
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(
|
job, err := cronlib.NewJobModel(
|
||||||
spec,
|
"*/5 * * * * *",
|
||||||
func() {
|
func() {
|
||||||
stdout(ssrv, tspec)
|
pstdout("do clean gc action")
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err.Error())
|
panic(err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
// register srvName -> job
|
err = cron.Register("clean", job)
|
||||||
err = cron.Register(srv, job)
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err.Error())
|
panic(err.Error())
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func handleBackup() {
|
||||||
|
job, err := cronlib.NewJobModel(
|
||||||
|
"*/5 * * * * *",
|
||||||
|
func() {
|
||||||
|
pstdout("do backup action")
|
||||||
|
},
|
||||||
|
)
|
||||||
|
if err != nil {
|
||||||
|
panic(err.Error())
|
||||||
}
|
}
|
||||||
|
|
||||||
cron.Start()
|
err = cron.DynamicRegister("backup", job)
|
||||||
cron.Wait()
|
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)
|
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
|
// reset - reset srv model
|
||||||
func (c *CronSchduler) reset(srv string, model *JobModel, denyReplace, autoStart bool) error {
|
func (c *CronSchduler) reset(srv string, model *JobModel, denyReplace, autoStart bool) error {
|
||||||
c.Lock()
|
c.Lock()
|
||||||
|
Reference in New Issue
Block a user