hashicorp/nomad · error

cron.end must contain %d fields

Error message

cron.end must contain %d fields

What it means

Returned by TaskSchedule.Validate when the cron.end expression does not have exactly 2 space-separated fields. End expressions are partial crons (hour minute); a different field count cannot be completed into a valid schedule.

Source

Thrown at nomad/structs/task_sched.go:80

	Cron *TaskScheduleCron
}

func (t *TaskSchedule) Validate() error {
	if t.Cron == nil {
		return errors.New("must specify cron block")
	}

	const (
		startFields     = 6
		endFields       = 2
		restrictedChars = "/,"
	)

	if strings.Count(t.Cron.Start, " ") != (startFields - 1) {
		return fmt.Errorf("cron.start must contain %d fields", startFields)
	}
	if strings.Count(t.Cron.End, " ") != (endFields - 1) {
		return fmt.Errorf("cron.end must contain %d fields", endFields)
	}
	if strings.ContainsAny(t.Cron.Start, restrictedChars) {
		return fmt.Errorf("cron.start must not contain %q", restrictedChars)
	}
	if strings.ContainsAny(t.Cron.End, restrictedChars) {
		return fmt.Errorf("cron.end must not contain %q", restrictedChars)
	}

	return nil
}

func (t *TaskSchedule) Next(from time.Time) (start, end time.Duration, err error) {
	return t.Cron.Next(from)
}

type TaskScheduleCron struct {
	// Start is a stripped-down cron syntax, e.g.
	// "0 30 9 * * MON-FRI *"

View on GitHub (pinned to 482b49bf1a)

Solutions

  1. Provide cron.end with exactly 2 fields such as "17 *"
  2. Check for extra spaces or omitted fields
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at nomad/structs/task_sched.go:80 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of hashicorp/nomad@482b49bf1a (2026-09-04). Data as JSON: /api/errors/b2a5fea1aaec2f3b. Report an issue: GitHub.