fix: sync script cron expr
This commit is contained in:
@@ -8,6 +8,7 @@ import (
|
|||||||
"regexp"
|
"regexp"
|
||||||
"strings"
|
"strings"
|
||||||
"github.com/engigu/baihu-panel/internal/utils"
|
"github.com/engigu/baihu-panel/internal/utils"
|
||||||
|
"github.com/robfig/cron/v3"
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
@@ -136,9 +137,23 @@ func ExtractScriptMeta(path string, ext string) (taskName string, taskCron strin
|
|||||||
return taskName, taskCron
|
return taskName, taskCron
|
||||||
}
|
}
|
||||||
|
|
||||||
// isLikelyCron 校验字符串是否符合 Cron 表达式的格式特征
|
// isLikelyCron 校验字符串是否符合 Cron 表达式的格式特征且数值合法
|
||||||
func isLikelyCron(s string) bool {
|
func isLikelyCron(s string) bool {
|
||||||
return cronFormatRegex.MatchString(s)
|
if !cronFormatRegex.MatchString(s) {
|
||||||
|
return false
|
||||||
|
}
|
||||||
|
|
||||||
|
// 语义校验:确保数值在合法范围内(解决如 JS 数组数字超出 Cron 范围的问题)
|
||||||
|
fields := strings.Fields(s)
|
||||||
|
testCron := s
|
||||||
|
if len(fields) == 5 {
|
||||||
|
testCron = "0 " + s
|
||||||
|
}
|
||||||
|
|
||||||
|
// 使用与面板执行器一致的 Parser 进行校验
|
||||||
|
parser := cron.NewParser(cron.Second | cron.Minute | cron.Hour | cron.Dom | cron.Month | cron.Dow | cron.Descriptor)
|
||||||
|
_, err := parser.Parse(testCron)
|
||||||
|
return err == nil
|
||||||
}
|
}
|
||||||
|
|
||||||
// splitKeywords 按竖线或逗号分割字符串
|
// splitKeywords 按竖线或逗号分割字符串
|
||||||
|
|||||||
Reference in New Issue
Block a user