diff --git a/pkg/scriptcat/utils.go b/pkg/scriptcat/utils.go index 1f31f0c..5c2a362 100644 --- a/pkg/scriptcat/utils.go +++ b/pkg/scriptcat/utils.go @@ -36,11 +36,24 @@ func ConvCron(cron string) (string, error) { } for i, v := range unit { if v == "once" { + // once -> * unit[i] = "*" - i -= 1 - for ; i >= 0; i-- { - if unit[i] == "*" { - unit[i] = "0" + for j := i - 1; j >= 0; j-- { + if unit[j] == "*" { + unit[j] = "0" + } + } + break + } else if strings.HasPrefix(v, "once(") && strings.HasSuffix(v, ")") { + // once(expr) -> expr + expr := v[len("once(") : len(v)-1] + if expr == "" { + return "", errors.New("once() expression cannot be empty: " + v) + } + unit[i] = expr + for j := i - 1; j >= 0; j-- { + if unit[j] == "*" { + unit[j] = "0" } } break