feat: add pre and post command
This commit is contained in:
@@ -107,7 +107,9 @@ func (m *CronManager) AddTask(task CronTask) error {
|
||||
return &ExecutionRequest{
|
||||
TaskID: taskID,
|
||||
Name: name,
|
||||
Command: cmd,
|
||||
Command: cmd,
|
||||
PreCommand: task.GetPreCommand(),
|
||||
PostCommand: task.GetPostCommand(),
|
||||
Type: TaskTypeCron,
|
||||
Timeout: timeout,
|
||||
WorkDir: workDir,
|
||||
|
||||
@@ -21,6 +21,8 @@ type Task interface {
|
||||
GetID() string
|
||||
GetName() string
|
||||
GetCommand() string
|
||||
GetPreCommand() string
|
||||
GetPostCommand() string
|
||||
GetTimeout() int
|
||||
GetWorkDir() string
|
||||
GetEnvs() string
|
||||
@@ -40,8 +42,10 @@ type CronTask interface {
|
||||
|
||||
// Request 任务执行请求
|
||||
type Request struct {
|
||||
Command string
|
||||
WorkDir string
|
||||
Command string
|
||||
PreCommand string
|
||||
PostCommand string
|
||||
WorkDir string
|
||||
Envs []string
|
||||
Timeout int // 任务超时时间(分钟)
|
||||
Languages []map[string]string
|
||||
@@ -121,6 +125,19 @@ func ExecuteWithHooks(ctx context.Context, req Request, stdout, stderr io.Writer
|
||||
req.UseMise = false
|
||||
}
|
||||
|
||||
// 组合指令(如果存在前置或后置指令)
|
||||
if req.PreCommand != "" || req.PostCommand != "" {
|
||||
finalCmd := ""
|
||||
if req.PreCommand != "" {
|
||||
finalCmd += req.PreCommand + "\n"
|
||||
}
|
||||
finalCmd += req.Command
|
||||
if req.PostCommand != "" {
|
||||
finalCmd += "\n" + req.PostCommand
|
||||
}
|
||||
req.Command = finalCmd
|
||||
}
|
||||
|
||||
// 1. 执行前钩子
|
||||
var logID string
|
||||
if hooks != nil {
|
||||
|
||||
@@ -66,8 +66,10 @@ type ExecutionRequest struct {
|
||||
LogID string // 日志 ID
|
||||
Name string // 任务名称
|
||||
Type TaskType // 任务类型
|
||||
Command string // 命令
|
||||
WorkDir string // 工作目录
|
||||
Command string // 命令
|
||||
PreCommand string // 前置命令
|
||||
PostCommand string // 后置命令
|
||||
WorkDir string // 工作目录
|
||||
Envs []string // 环境变量
|
||||
Secrets []string // 需要脱敏的密码
|
||||
Timeout int // 超时时间(分钟)
|
||||
@@ -204,7 +206,9 @@ func NewScheduler(config SchedulerConfig, handler SchedulerEventHandler) *Schedu
|
||||
executor: func(ctx context.Context, req *ExecutionRequest, stdout, stderr io.Writer) (*Result, error) {
|
||||
hooks := &schedulerHooksAdapter{handler: handler, req: req}
|
||||
return ExecuteWithHooks(ctx, Request{
|
||||
Command: req.Command,
|
||||
Command: req.Command,
|
||||
PreCommand: req.PreCommand,
|
||||
PostCommand: req.PostCommand,
|
||||
WorkDir: req.WorkDir,
|
||||
Envs: req.Envs,
|
||||
Timeout: req.Timeout,
|
||||
|
||||
Reference in New Issue
Block a user