# README
package main
import (
"log"
"comma/library/util/crontab"
)
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(
"*/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
open async mode and try catch mode
func run() error {
cron := cronlib.New()
// set async mode
job, err = cronlib.NewJobModel(
"0 * * * * *",
func(),
cronlib.AsyncMode(),
cronlib.TryCatchMode(),
)
...
}
other method
func run() error {
cron := cronlib.New()
// set async mode
job, err = cronlib.NewJobModel(
"0 * * * * *",
func(),
)
...
job.SetTryCatch(cronlib.OnMode)
job.SetAsyncMode(cronlib.OnMode)
...
}
stop job
cron := cronlib.New()
...
cron.StopService(srvName)
update job
spec := "*/3 * * * * *"
srv := "risk.scan.total.5s.to.3s"
job, _ := cronlib.NewJobModel(
spec,
func() {
stdout(srv, spec)
},
)
err := cron.UpdateJobModel(srv, job)
...
Example
package main
// test for crontab spec
import (
"log"
"time"
"comma/library/util/crontab"
)
func main() {
cron := cronlib.New()
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 * * * * *",
}
for srv, spec := range specList {
tspec := spec // copy
ssrv := srv // copy
job, err := cronlib.NewJobModel(
spec,
func() {
stdout(ssrv, tspec)
},
)
if err != nil {
panic(err.Error())
}
err = cron.Register(srv, job)
if err != nil {
panic(err.Error())
}
}
// update test
time.AfterFunc(10*time.Second, func() {
spec := "*/3 * * * * *"
srv := "risk.scan.total.5s.to.3s"
log.Println("reset 5s to 3s", srv)
job, _ := cronlib.NewJobModel(
spec,
func() {
stdout(srv, spec)
},
)
cron.UpdateJobModel(srv, job)
log.Println("reset finish", srv)
})
// kill test
time.AfterFunc(3*time.Second, func() {
srv := "risk.scan.total.1s"
log.Println("stoping", srv)
cron.StopService(srv)
log.Println("stop finish", srv)
})
time.AfterFunc(11*time.Second, func() {
srvPrefix := "risk"
log.Println("stoping srv prefix", srvPrefix)
cron.StopServicePrefix(srvPrefix)
})
cron.Start()
cron.Wait()
}
func stdout(srv, spec string) {
log.Println(srv, spec)
}
# Packages
No description provided by the author
# Functions
No description provided by the author
Every returns a crontab Schedule that activates once every duration.
No description provided by the author
NewJobModel - defualt block sync callfunc.
Creates a custom Parser with custom options.
Parse returns a new crontab schedule representing the given spec.
ParseStandard returns a new crontab schedule representing the given standardSpec (https://en.wikipedia.org/wiki/Cron).
No description provided by the author
No description provided by the author
No description provided by the author
# Constants
Allow descriptors such as @monthly, @weekly, etc.
Day of month field, default *.
Day of week field, default *.
Optional day of week field, default *.
Hours field, default 0.
Minutes field, default 0.
Month field, default *.
No description provided by the author
No description provided by the author
Seconds field, default 0.
# Variables
No description provided by the author
No description provided by the author
No description provided by the author
No description provided by the author
# Structs
ConstantDelaySchedule represents a simple recurring duty cycle, e.g.
No description provided by the author
No description provided by the author
A custom Parser that can be configured.
SpecSchedule specifies a duty cycle (to the second granularity), based on a traditional crontab specification.
# Interfaces
The Schedule describes a job's duty cycle.
# Type aliases
No description provided by the author
Configuration options for creating a parser.