You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apache Airflow调度器间隔与任务启动时间异常排查求助

解决Airflow 1.9.0任务未按时触发的问题

针对你遇到的Airflow任务未在28.03 6:48(本地UTC+3)启动的问题,结合你使用的Airflow 1.9.0、Ubuntu本地执行器环境,我整理了以下排查和解决步骤:

1. 先明确Airflow的时间核心逻辑

Airflow 1.9.0默认使用UTC时间处理所有调度逻辑,任务会在上一个调度周期结束时触发,而非周期开始时间。比如你要本地6:48触发,对应UTC是3:48,那么调度周期的结束时间是UTC 3:48,任务会在此时启动。如果你的schedule_interval或start_date用了本地时间而非UTC,就会出现时间错位。

2. 排查DAG的时间配置是否正确

检查start_date和schedule_interval的时区匹配

确保你的start_date是UTC时间,schedule_interval也是基于UTC的cron表达式:

  • 本地6:48(UTC+3)对应UTC 3:48,所以cron表达式应该是48 3 * * *,而非48 6 * * *
  • start_date要设置为过去的UTC时间,比如datetime(2024, 3, 25, 3, 48, 0)(对应本地25号6:48),而不是本地时间的6:48

示例正确配置:

from datetime import datetime
from airflow import DAG
from airflow.operators.dummy_operator import DummyOperator

default_args = {
    'owner': 'your_team',
    'start_date': datetime(2024, 3, 25, 3, 48, 0),  # 明确使用UTC时间
    'retries': 1,
}

dag = DAG(
    'your_target_dag',
    default_args=default_args,
    schedule_interval='48 3 * * *',  # UTC每天3:48触发,对应本地6:48
    catchup=False,  # 关闭补跑,避免不必要的历史任务干扰
)

# 你的任务定义
sample_task = DummyOperator(
    task_id='sample_task',
    dag=dag,
)

确认catchup参数设置

如果catchup=True,Airflow会补跑start_date到当前时间的所有未执行任务,但如果你的start_date设置过晚(比如28号),第一个任务会在29号才触发(因为要等第一个周期结束)。建议设置catchup=False,仅执行未来的调度任务。

3. 检查Airflow核心组件状态

确认DAG未被暂停

在Airflow UI的DAG列表中,确保你的目标DAG是Active状态(没有被暂停)。不小心暂停DAG是任务不触发的常见原因。

重启Airflow Scheduler

Airflow 1.9.0的scheduler偶尔会出现进程挂起或调度逻辑卡住的情况,重启scheduler可以解决大部分这类问题:

  • 如果是用systemd管理的服务,执行:
    sudo service airflow-scheduler restart
    
  • 如果是直接运行的进程,先杀死旧进程再重新启动:
    ps aux | grep airflow-scheduler | grep -v grep | awk '{print $2}' | xargs kill -9
    airflow scheduler &
    

查看Scheduler日志

检查scheduler的日志文件(默认路径/var/log/airflow/scheduler,具体看你的airflow.cfg配置),搜索28号UTC 3:48左右的日志,看是否有任务实例创建失败、依赖错误或其他异常信息。

4. 检查任务实例状态

在Airflow UI的Browse -> Task Instances中,筛选28号的任务实例:

  • 如果任务实例不存在:说明scheduler没有生成该任务,大概率是start_date和schedule_interval的组合有问题(比如start_date设置为28号,第一个任务要等29号)
  • 如果任务实例存在但状态为Scheduled或Queued:可能是本地执行器资源不足,或者任务被卡住,可以手动触发试试
  • 如果任务实例状态为Failed:查看任务日志,定位具体错误原因

5. 确认时区配置未被篡改

检查airflow.cfg中的default_timezone参数,确保值为utc(Airflow 1.9.0默认值)。如果修改为其他时区,会导致整个调度逻辑混乱。


内容的提问来源于stack exchange,提问作者Николай Осиний

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 06:30:15