Airflow DAG调度在2022年10月29日时区变更后失效求助
时区变更后Airflow DAG计划运行却被跳过的解决方案
问题背景
若干Airflow DAG设置为每周一6点运行,在2022年10月29日时区变更前运行正常,此后完全停止运行。服务器能正确识别下次运行时间,但任务总是被跳过。已尝试修改运行日期、重置DAG,均无效。
DAG代码如下:
from datetime import datetime as dt default_args = { 'owner': 'airflow', 'start_date': dt.datetime(year=2022, month=10, day=17),#, hour=10), 'concurrency': 1, 'retries': 5, 'retry_delay': dt.timedelta(seconds=10) } bucket_name = "store_order_forecast_s1_2_3" dag = DAG( dag_id=bucket_name, default_args=default_args, schedule_interval='0 6 * * 1', catchup=False )

解决步骤
1. 显式指定时区(核心修复)
Airflow调度默认依赖系统时区,时区变更后容易出现时间解析冲突。需要在DAG配置中明确指定时区:
- 使用
pendulum库(Airflow推荐的时区处理库)定义带时区的start_date - 在DAG实例中添加
timezone参数
修改后的代码示例:
from datetime import timedelta import pendulum default_args = { 'owner': 'airflow', # 替换为你的实际时区,比如Asia/Shanghai、Europe/London等 'start_date': pendulum.datetime(2022, 10, 17, tz="Asia/Shanghai"), 'concurrency': 1, 'retries': 5, 'retry_delay': timedelta(seconds=10) } bucket_name = "store_order_forecast_s1_2_3" dag = DAG( dag_id=bucket_name, default_args=default_args, schedule_interval='0 6 * * 1', catchup=False, timezone="Asia/Shanghai" # 与start_date时区保持一致 )
注意:确保Airflow服务器的系统时区与指定时区匹配,避免双重时区解析错误。
2. 检查任务实例与调度逻辑
- 进入Airflow UI的DAG详情页,查看Task Instances列表,找到
skipped状态的实例,查看日志中的跳过原因 - 执行命令验证系统计算的下次运行时间:
确认输出时间是否符合预期时区下的每周一6点。airflow dags next-execution store_order_forecast_s1_2_3
3. 重置DAG调度状态
若上述操作无效,可清除所有历史任务实例并重新激活DAG:
- 通过UI操作:进入DAG详情页,点击Clear All按钮,选择清除所有任务实例后确认
- 通过命令行操作:
# 暂停DAG airflow dags pause store_order_forecast_s1_2_3 # 清除所有任务实例 airflow dags clear store_order_forecast_s1_2_3 # 重新激活DAG airflow dags unpause store_order_forecast_s1_2_3
4. 检查Airflow版本兼容性
旧版本Airflow(如1.x)存在时区处理bug,建议升级到Airflow 2.x稳定版本,新版本对时区的支持更完善,能避免此类问题。
内容的提问来源于stack exchange,提问作者yianniseco
相关产品推荐
相关产品推荐

