code: func (m *Machine) OnScheduleChange() {
  	// Do not touch timers on disabled cron machines.
  	if !m.State.Enabled {
  		return
  	}
  
  	// The following condition is true for cron machines on a relative schedule
  	// that have already "fired", and currently wait for manual RewindIfNecessary
  	// call to start ticking again. When such cron machines switch to an absolute
  	// schedule, we need to rewind them right away (since machines on absolute
  	// schedules always tick!). If the new schedule is also relative, do nothing:
  	// RewindIfNecessary() should be called manually by the host at some later
  	// time (as usual for relative schedules).
  	if m.State.LastTick.When.IsZero() {
  		if m.Schedule.IsAbsolute() {
  			m.RewindIfNecessary()
  		}
  	} else {
  		// In this branch, the cron machine has a timer tick scheduled. It means it
  		// is either in a relative or absolute schedule, and this schedule may have
  		// changed, so we may need to move the tick to reflect the change. Note that
  		// we are not resetting LastRewind here, since we want the new schedule to
  		// take into account real last RewindIfNecessary call. For example, if the
  		// last rewind happened at moment X, current time is Now, and the new
  		// schedule is "with 10s interval", we want the tick to happen at "X+10",
  		// not "Now+10".
  		m.scheduleTick(m.Now)
  	}
  }
docs: // OnScheduleChange happens when cron's schedule changes.
  //
  // In particular, it handles switches between absolute and relative schedules.