稳定发布1.0.0
This commit is contained in:
@@ -1,5 +1,5 @@
|
|||||||
location: wushan # 项目名称
|
location: wushan # 项目名称
|
||||||
point: 2 # 点位
|
point: 3 # 点位
|
||||||
relay:
|
relay:
|
||||||
maxTimeout: 60 # 单位 s,必须大于 0
|
maxTimeout: 60 # 单位 s,必须大于 0
|
||||||
log:
|
log:
|
||||||
|
|||||||
@@ -35,6 +35,7 @@ func Pause(ctrl *common.CtrlWait) leaf.HandlerFunc {
|
|||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
case <-originalCtx.Done():
|
case <-originalCtx.Done():
|
||||||
|
cancel()
|
||||||
zap.S().Infoln("待机控制器监听结束")
|
zap.S().Infoln("待机控制器监听结束")
|
||||||
return
|
return
|
||||||
case <-ctrl.R:
|
case <-ctrl.R:
|
||||||
|
|||||||
@@ -12,7 +12,7 @@ func Unique(stopper common.Stopper) leaf.HandlerFunc {
|
|||||||
var lock sync.Mutex
|
var lock sync.Mutex
|
||||||
return func(c *leaf.Context) {
|
return func(c *leaf.Context) {
|
||||||
if !lock.TryLock() {
|
if !lock.TryLock() {
|
||||||
zap.S().Infoln("尝试加锁失败,执行停止任务")
|
zap.S().Infoln("停止之前的任务,再尝试加锁")
|
||||||
stopper.Stop()
|
stopper.Stop()
|
||||||
lock.Lock()
|
lock.Lock()
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -31,6 +31,9 @@ func runAction(c *leaf.Context, item schema.WaitItemModel, rootRules []cronrange
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
a := make(chan bool)
|
||||||
|
defer close(a)
|
||||||
|
|
||||||
// 等待组
|
// 等待组
|
||||||
var wait sync.WaitGroup
|
var wait sync.WaitGroup
|
||||||
defer wait.Wait()
|
defer wait.Wait()
|
||||||
@@ -38,46 +41,57 @@ func runAction(c *leaf.Context, item schema.WaitItemModel, rootRules []cronrange
|
|||||||
ticker := time.NewTicker(time.Second)
|
ticker := time.NewTicker(time.Second)
|
||||||
defer ticker.Stop()
|
defer ticker.Stop()
|
||||||
|
|
||||||
ctx, cancel := context.WithCancel(context.TODO())
|
|
||||||
|
|
||||||
var run bool
|
|
||||||
|
|
||||||
wait.Add(1)
|
wait.Add(1)
|
||||||
go func() {
|
go func() {
|
||||||
defer wait.Done()
|
defer wait.Done()
|
||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
case <-c.Done():
|
case <-c.Done():
|
||||||
cancel()
|
|
||||||
return
|
return
|
||||||
case <-ticker.C:
|
case <-ticker.C:
|
||||||
if cronrange.Match(rules, time.Now()) && cronrange.Match(rootRules, time.Now()) {
|
if cronrange.Match(rules, time.Now()) && cronrange.Match(rootRules, time.Now()) {
|
||||||
run = true
|
a <- true
|
||||||
} else {
|
} else {
|
||||||
run = false
|
a <- false
|
||||||
cancel()
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}()
|
}()
|
||||||
|
|
||||||
|
var cancel context.CancelFunc
|
||||||
|
var m sync.Mutex
|
||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
case <-c.Done():
|
case <-c.Done():
|
||||||
|
if cancel != nil {
|
||||||
|
cancel()
|
||||||
|
}
|
||||||
return
|
return
|
||||||
default:
|
case r := <-a:
|
||||||
if run {
|
if r {
|
||||||
err := play(ctx, item)
|
if ok := m.TryLock(); ok {
|
||||||
if err != nil {
|
ctx, cc := context.WithCancel(context.TODO())
|
||||||
zap.S().Errorln("执行动作异常: ", err)
|
cancel = cc
|
||||||
<-time.After(time.Minute)
|
wait.Add(1)
|
||||||
}
|
go func() {
|
||||||
} else {
|
defer wait.Done()
|
||||||
select {
|
defer m.Unlock()
|
||||||
case <-c.Done():
|
defer func() { cancel = nil }()
|
||||||
return
|
|
||||||
case <-time.After(time.Second):
|
err := play(ctx, item)
|
||||||
|
if err != nil {
|
||||||
|
zap.S().Errorln("执行动作异常: ", err)
|
||||||
|
select {
|
||||||
|
case <-ctx.Done():
|
||||||
|
return
|
||||||
|
case <-time.After(time.Minute):
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}()
|
||||||
}
|
}
|
||||||
|
} else if cancel != nil {
|
||||||
|
cancel()
|
||||||
|
cancel = nil
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -29,16 +29,14 @@ func Play(ctx context.Context, file string) error {
|
|||||||
var wait sync.WaitGroup
|
var wait sync.WaitGroup
|
||||||
defer wait.Wait()
|
defer wait.Wait()
|
||||||
|
|
||||||
a := make(chan struct{})
|
|
||||||
defer close(a)
|
|
||||||
|
|
||||||
wait.Add(1)
|
wait.Add(1)
|
||||||
go func() {
|
go func() {
|
||||||
defer wait.Done()
|
defer wait.Done()
|
||||||
reader := bufio.NewReader(pipe)
|
reader := bufio.NewReader(pipe)
|
||||||
for {
|
for {
|
||||||
select {
|
select {
|
||||||
case <-a:
|
case <-ctx.Done():
|
||||||
|
return
|
||||||
default:
|
default:
|
||||||
line, _, err := reader.ReadLine()
|
line, _, err := reader.ReadLine()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|||||||
@@ -127,7 +127,7 @@ Payload:
|
|||||||
|
|
||||||
```json lines
|
```json lines
|
||||||
{
|
{
|
||||||
// 执行的时间区间
|
// 执行的时间区间(需要系统配置正确时区)
|
||||||
"cron": "17:20-21:35 1-5 * *",
|
"cron": "17:20-21:35 1-5 * *",
|
||||||
// 执行项
|
// 执行项
|
||||||
"items": [
|
"items": [
|
||||||
@@ -148,6 +148,11 @@ Payload:
|
|||||||
|
|
||||||
> 同一个类型的待机任务只能有一个,当有新的任务到达时会覆盖之前的任务
|
> 同一个类型的待机任务只能有一个,当有新的任务到达时会覆盖之前的任务
|
||||||
|
|
||||||
|
### 配置时区
|
||||||
|
```bash
|
||||||
|
sudo timedatectl set-timezone Asia/Shanghai
|
||||||
|
```
|
||||||
|
|
||||||
### Cron Format
|
### Cron Format
|
||||||
|
|
||||||
The format consists of four fields separated by whitespace:
|
The format consists of four fields separated by whitespace:
|
||||||
|
|||||||
Reference in New Issue
Block a user