A CronScheduler executes the set of Jobs at the time instants defined by Cron expressions.
Each Job has it's own expression and executed separately from others.
The Scheduler ensures that at least one
Execution is created and successfully run for a given time instant.
It also handles the retry policy.
We follow the semantic of Cron on Unix systems and we don't manage misfires
(meaning that if the scheduler missed some events because it was offline,
or because a previous job execution was still running, we won't replay them).
Job is considered as finished when
we can't produce the next computing instant from Cron expression.