Workflows can be run automatically using schedules associated with launch plans.

Only one launch plan version for a given {Project, Domain, Name} combination can be active, which means only one schedule can be active for a launch plan. This is because a single active schedule can exist across all versions of the launch plan.

A workflow version can have multiple schedules associated with it, given that these schedules exist as versions of different launch plans.

Creating a new schedule creates a new version of the launch plan. If you wish to change a schedule, you will have to create a new version of that launch plan since a schedule cannot be edited.

FlyteAdmin keeps track of the newly-added schedules, and searches through all the versions of launch plans to set them to ‘deactivated’.

The launch plan versions with schedules that were previously deactivated can be manually used, by clicking on the launch button and selecting the specific launch plan version.

Let’s now look at how schedules can be defined through cron_expression or rate_unit.

Cron Expression

Cron expression strings use this syntax. They are validated at launch plan registration time.


A cron expression represents a set of times, with the help of 5 space-separated fields.

Field name


Allowed values

Allowed special characters




  • / , -




  • / , -

Day of month



  • / , - ?



1-12 or JAN-DEC

  • / , -

Day of week


0-6 or SUN-SAT

  • / , - ?

Note: The ‘Month’ and ‘Day of week’ fields are case insensitive.

Short hand cron formats/predefined schedules



Equivalent To

@yearly (or @annually)

Run once a year, midnight, Jan. 1st

0 0 1 1 *


Run once a month, midnight, first of month

0 0 1 * *


Run once a week, midnight between Sat/Sun

0 0 * * 0

@daily (or @midnight)

Run once a day, midnight

0 0 * * *


Run once an hour, beginning of hour

0 * * * *

The string field of the schedule should be populated. Here is an example.

Cron schedules

An incorrect cron schedule expression leads to a failure in triggering the schedule. Here is a table that shows the format of a cron expression.

Below is another example:

cron_lp_every_min_of_hour = LaunchPlan.get_or_create(
    # Note that kickoff_time_input_arg matches the workflow input we defined above: kickoff_time
    # But in case you are using the AWS scheme of schedules and not using the native scheduler then switch over the schedule parameter with cron_expression
    schedule="@hourly", # Following schedule runs every hour at beginning of the hour


Fixed rate schedules

Instead of cron schedules, fixed rate schedules can be used.

You can specify the duration in the schedule using timedelta, that supports minutes, hours, days and weeks.

Here is an example with duration in minutes.

Below is an example with duration in days.

fixed_rate_lp_days = LaunchPlan.get_or_create(
    # Note that the above workflow doesn't accept any kickoff time arguments.
    # We omit the ``kickoff_time_input_arg`` from the FixedRate schedule invocation
    fixed_inputs={"name": "you"},


Rate Unit

Schedules can also be defined using fixed rates in units of days, hours and minutes.