func RunJob(job *jobfile.Job, ctx context.Context, shell string, testing bool) *jobfile.RunRec { rec := &jobfile.RunRec{Job: job, RunTime: time.Now()} // run var sudoResult *common.SudoResult sudoResult, err := common.Sudo(job.User, job.Cmd, shell, nil) if err != nil { /* unexpected error while trying to run job */ rec.Err = err return rec } // update run rec rec.Succeeded = sudoResult.Succeeded rec.NewStatus = jobfile.JobGood rec.Stdout = &sudoResult.Stdout rec.Stderr = &sudoResult.Stderr if !testing { // update job if sudoResult.Succeeded { /* job succeeded */ job.Status = jobfile.JobGood } else { /* job failed: apply error-handler (which sets job.Status) */ job.ErrorHandler.Apply(job) } job.LastRunTime = rec.RunTime // update rec.NewStatus rec.NewStatus = job.Status } return rec }