Introduction to Apache Airflow in Python
Mike Metzger
Data Engineer
schedulerunningfailedsuccess

When scheduling a Dag, there are several attributes of note:
start_date - The date / time to initially schedule the Dag runend_date - Optional attribute for when to stop running new Dag instancesstart_date and end_date both use a datetime(year, month, day) object, such as: from pendulum import datetime
start_date=datetime(2026, 4, 10, tz="UTC")
schedule represents:
start_date and end_datecron style syntax, built-in presets, or timedeltas.
* represents running for every interval (ie, every minute, every day)
0 12 * * * # Run daily at noon
* * 25 2 * # Run once per minute on February 25
0,15,30,45 * * * * # Run every 15 minutes
Preset:
cron equivalent:
0 * * * *0 0 * * *0 0 * * 00 0 1 * *0 0 1 1 *Airflow has three special schedule presets:
None - Don't schedule ever, used for manually triggered Dags@once - Schedule only once@continuous - Run immediately after previous run finishespendulum.durationduration(hours=6)duration(minutes=30)from pendulum import duration
@dag(
dag_id="example_dag"
schedule=duration(days=2)
)
schedule parameter:@dag(
dag_id="example_dag",
schedule="0 12 * * *"
)
@dag(
dag_id="example_dag",
schedule="@daily"
)
When scheduling a Dag, Airflow will:
start_date + schedule'start_date': datetime(2026, 2, 25, tz="UTC")
'schedule': @daily
Earliest start time to run the Dag is February 26th, 2026
Introduction to Apache Airflow in Python