Schedule Trigger

Schedule flows using cron expressions.

The Schedule trigger generates new executions on a regular cadence based on a Cron expression or custom scheduling conditions.

type: "io.kestra.plugin.core.trigger.Schedule"

Kestra can trigger flows on a defined schedule. If you need to wait for another system to be ready and no event mechanism is available, you can configure one or more time-based schedules for your flow.

Kestra can automatically handle backfills to recover missed executions.

Check the Schedule task documentation for the list of the task properties and outputs.

Examples

Schedule that runs every 15 minutes:

triggers:
- id: schedule
type: io.kestra.plugin.core.trigger.Schedule
cron: "*/15 * * * *"

Schedule that runs only on the first monday of every month at 11 AM:

triggers:
- id: schedule
type: io.kestra.plugin.core.trigger.Schedule
cron: "0 11 * * 1"
conditions:
- type: io.kestra.plugin.core.condition.DayWeekInMonth
date: "{{ trigger.date }}"
dayOfWeek: "MONDAY"
dayInMonth: "FIRST"

A schedule that runs daily at midnight US Eastern time:

triggers:
- id: daily
type: io.kestra.plugin.core.trigger.Schedule
cron: "@daily"
timezone: America/New_York

Schedule Conditions

When a cron expression alone is not sufficient (e.g., only first Monday of the month, only weekends), you can refine schedules using conditions.

You must use the {{ trigger.date }} expression on the property date of the current schedule.

This condition will be evaluated and {{ trigger.previous }} and {{ trigger.next }} will reflect the date with the conditions applied.

The list of core conditions that can be used are:

Here’s an example using the DayWeek condition:

id: conditions
namespace: company.team
tasks:
- id: hello
type: io.kestra.plugin.core.log.Log
message: This will execute only on Thursday!
triggers:
- id: schedule
type: io.kestra.plugin.core.trigger.Schedule
cron: "@hourly"
conditions:
- type: io.kestra.plugin.core.condition.DayWeek
dayOfWeek: "THURSDAY"

Recover Missed Schedules

Automatically

By default, Kestra automatically recovers missed schedules. This means that if the Kestra server is down, the missed schedules will be executed as soon as the server is back up. However, this behavior is not always desirable, e.g. during a planned maintenance window. In Kestra 0.15 and higher, this behavior can be disabled by setting the recoverMissedSchedules configuration to NONE.

Kestra 0.15 introduced a new configuration allowing you to choose whether you want to recover missed schedules or not:

kestra:
plugins:
configurations:
- type: io.kestra.plugin.core.trigger.Schedule
values:
# available options: LAST | NONE | ALL -- default: ALL
recoverMissedSchedules: NONE

The recoverMissedSchedules configuration can be set to ALL, NONE or LAST:

  • ALL: Kestra will recover all missed schedules. This is the default value.
  • NONE: Kestra will not recover any missed schedules.
  • LAST: Kestra will recover only the last missed schedule for each flow.

Note that this is a global configuration that will apply to all flows, unless other behavior is explicitly defined within the flow definition:

triggers:
- id: schedule
type: io.kestra.plugin.core.trigger.Schedule
cron: "*/15 * * * *"
recoverMissedSchedules: NONE

In this example, the recoverMissedSchedules is set to NONE, which means that Kestra will not recover any missed schedules for this specific flow regardless of the global configuration.

Using Backfill

Backfills are replays of missed schedule intervals between a defined start and end date.

To backfill the missed executions, go to the Triggers tab on the flow’s detail page and click on the Backfill executions button.

backfill1

For more information on Backfill, check out the dedicated documentation.

Disabling the trigger

If you are unsure how to proceed, you can temporarily disable the trigger by setting disabled: true in the YAML or toggling it in the UI.

This is useful if you are figuring out what to do before the next schedule is due to run.

For more information on Disabled, check out the dedicated documentation.

Setting Inputs inside of the Schedule trigger

You can easily pass inputs to the Schedule Trigger by using the inputs property and passing them as a key-value pair.

In this example, the user input is set to “John Smith” inside of the schedule trigger:

id: myflow
namespace: company.team
inputs:
- id: user
type: STRING
defaults: Rick Astley
tasks:
- id: hello
type: io.kestra.plugin.core.log.Log
message: "Hello {{ inputs.user }}! 🚀"
triggers:
- id: schedule
type: io.kestra.plugin.core.trigger.Schedule
cron: "*/1 * * * *"
inputs:
user: John Smith