The DAG doesn't appear, or never gets a run
- Import errors: a syntax error or a failed import hides the DAG.
airflow dags list-import-errors - The DAG is paused. New DAGs are often paused by default (
dags_are_paused_at_creation).airflow dags unpause sales_daily - start_date and schedule: a run for an interval only starts after that interval ends. A
@dailyDAG withstart_date=2026-10-22first runs at the end of 22 Oct for the 22 Oct interval. -
start_dateisn't dynamic (datetime.now()), because that breaks scheduling. Use a fixed date. -
catchup=Falseif you don't want a backfill of every missed interval. - Time zone:
start_datewithout a time zone is UTC.
Tasks stay in scheduled or queued
Scheduler is healthy:
airflow jobs check --job-type SchedulerJob --allow-multiple --limit 2Check the scheduler logs for heartbeat failures, or a metadata DB that's out of connections.
Concurrency limits:
Limit Where parallelismWhole installation (airflow.cfg [core])max_active_tasksPer DAG max_active_runsRuns per DAG at the same time Pools default_poolhas 128 slots by defaultairflow pools listExecutor workers: with Celery, workers must be up and listening to the queue the task uses (
queue=on the operator). With Kubernetes, pods may be Pending (see the K8s posts).Sensors hogging slots: sensors in
pokemode hold a worker slot for hours. Usemode="reschedule"or deferrable operators.
Tasks keep failing or getting killed
- Read the task log in the UI. If there's no log, the task never started on a worker (executor or worker problem).
-
Task received SIGTERMor "zombie" task → the worker died (often OOM) or the task exceededexecution_timeout. - Test the task in isolation:
airflow tasks test sales_daily load_orders 2026-10-21 - Add
retriesandretry_delayfor flaky external systems, andon_failure_callbackfor alerting.
Re-run safely
airflow tasks clear sales_daily -t load_orders -s 2026-10-20 -e 2026-10-21 --downstream
Tasks must be idempotent (overwrite a partition, or MERGE) so that clearing and rerunning doesn't duplicate data.
Tip
On managed Airflow (MWAA, Composer, Astronomer), check the environment's worker autoscaling limits and the scheduler/DB size first. Most "stuck queued" incidents there are capacity limits, not DAG bugs.