hashicorp/nomad · error

cron.start must not contain %q

Error message

cron.start must not contain %q

What it means

TaskSchedule validation error: cron.start contains '/' or ',' — step values and lists are intentionally unsupported by this simplified schedule parser, so those restricted characters are rejected up front.

Source

Thrown at nomad/structs/task_sched.go:83

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 *"
	// is weekdays @ 09:30:00
	Start string
	// End is the end time in "{minute} {hour}" format, e.g.

View on GitHub (pinned to 482b49bf1a)

Solutions

  1. Expand steps/lists into plain field values (e.g. use '*' instead of '*/2')
  2. Restructure the schedule to avoid '/' and ',' in cron.start
Defensive patterns

Strategy: validation

When it happens

Trigger: Thrown at nomad/structs/task_sched.go:83 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/28a3deefe349e510. Report an issue: GitHub.