forked from libi/dcron
/
example.go
90 lines (81 loc) · 1.91 KB
/
example.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
package main
import (
"flag"
"fmt"
"log"
"os"
"strconv"
"time"
"github.com/BugKillerPro/dcron"
"github.com/BugKillerPro/dcron/dlog"
"github.com/BugKillerPro/dcron/driver"
"github.com/go-redis/redis/v8"
"github.com/google/uuid"
)
const (
DriverType_REDIS = "redis"
DriverType_ETCD = "etcd"
)
var (
addr = flag.String("addr", "127.0.0.1:6379", "the addr of driver service")
serverName = flag.String("server_name", "server", "the server name of dcron in this process")
subId = flag.String("sub_id", "1", "this process sub id in this server")
jobNumber = flag.Int("jobnumber", 3, "there number of cron job")
)
type WriteJob struct {
Id int
Logger dlog.Logger
}
func (wj *WriteJob) Run() {
filename := "tmpfile" + strconv.Itoa(wj.Id)
// open file and append some msg to it.
f, err := os.OpenFile(filename, os.O_WRONLY|os.O_APPEND, 0755)
if err != nil {
wj.Logger.Errorf("err=%v", err)
return
}
n, err := f.WriteString(
fmt.Sprintf("sub_id=%s, time=%s, append string=%s\n", *subId, time.Now().String(), uuid.New().String()),
)
if err != nil {
wj.Logger.Errorf("err=%v", err)
return
}
wj.Logger.Infof("write length=%d", n)
err = f.Close()
if err != nil {
wj.Logger.Errorf("err=%v", err)
return
}
}
func main() {
flag.Parse()
var err error
redisCli := redis.NewClient(&redis.Options{
Addr: *addr,
})
driver := driver.NewRedisDriver(redisCli)
logger := &dlog.StdLogger{
Log: log.New(os.Stdout, "["+*subId+"]", log.LstdFlags),
}
dcron := dcron.NewDcronWithOption(*serverName, driver,
dcron.WithLogger(logger),
dcron.WithHashReplicas(10),
dcron.WithNodeUpdateDuration(time.Second*10),
)
for i := 1; i <= *jobNumber; i++ {
job := &WriteJob{
Id: i,
Logger: logger,
}
err = dcron.AddJob("write-task"+strconv.Itoa(i), "* * * * *", job)
if err != nil {
panic(err)
}
}
dcron.Start()
// run forever
tick := time.NewTicker(time.Hour)
for range tick.C {
}
}