59 lines
1.8 KiB
Python
59 lines
1.8 KiB
Python
from datetime import datetime, timedelta
|
|
|
|
# 导入 Airflow 所需的类
|
|
from airflow import DAG
|
|
from airflow.operators.python import PythonOperator
|
|
from airflow.operators.bash import BashOperator
|
|
|
|
|
|
# 定义任务最终失败时的回调函数
|
|
def task_failure_callback(context):
|
|
# 获取当前任务实例
|
|
task_instance = context["task_instance"]
|
|
|
|
# 打印失败任务的名称和所属 DAG 名称
|
|
print(f"任务执行失败:{task_instance.task_id}")
|
|
print(f"DAG 名称:{task_instance.dag_id}")
|
|
|
|
|
|
# 定义任务的默认参数
|
|
default_args = {
|
|
"owner": "xiaozhang", # 任务负责人
|
|
"depends_on_past": False, # 不要求依赖上一次运行的结果
|
|
"email_on_failure": False, # 关闭邮件失败通知
|
|
"on_failure_callback": task_failure_callback, # 任务最终失败时调用
|
|
"retries": 1, # 失败后最多额外重试 1 次
|
|
"retry_delay": timedelta(minutes=5), # 重试前等待 5 分钟
|
|
}
|
|
|
|
|
|
# 定义一个普通的 Python 函数
|
|
def print_hello():
|
|
print("Hello, World!")
|
|
|
|
|
|
# 创建 DAG,也就是工作流
|
|
with DAG(
|
|
dag_id="hello_world2", # 改成新的 DAG ID
|
|
default_args=default_args,
|
|
description="这个是一个样例",
|
|
start_date=datetime(2024, 10, 1),
|
|
schedule_interval="@daily",
|
|
catchup=False,
|
|
tags=["demo", "xiaozhang"],
|
|
) as dag:
|
|
|
|
# 任务一:执行 Python 函数
|
|
task1 = PythonOperator(
|
|
task_id="print_hello", # 任务 ID
|
|
python_callable=print_hello, # 传入函数本身,不加括号
|
|
)
|
|
|
|
# 任务二:执行 Bash 命令
|
|
task2 = BashOperator(
|
|
task_id="run_bash_command", # 任务 ID
|
|
bash_command='echo "This is a Bash command"', # 要执行的命令
|
|
)
|
|
|
|
# 设置依赖:task1 成功后,task2 才会执行
|
|
task1 >> task2 |