跳到主要内容

Airflow Cron表达式

在Apache Airflow中,Cron表达式是调度任务的核心工具之一。它允许你以灵活的方式定义任务的执行时间。无论你是需要每天、每周、每月执行任务,还是更复杂的调度需求,Cron表达式都能满足你的需求。

什么是Cron表达式?

Cron表达式是一个由5或6个字段组成的字符串,用于定义任务的调度时间。每个字段代表一个时间单位,例如分钟、小时、日期等。通过组合这些字段,你可以精确地控制任务的执行时间。

Cron表达式的结构

一个标准的Cron表达式由以下5个字段组成:

┌───────────── 分钟 (0 - 59)
│ ┌───────────── 小时 (0 - 23)
│ │ ┌───────────── 日期 (1 - 31)
│ │ │ ┌───────────── 月份 (1 - 12)
│ │ │ │ ┌───────────── 星期 (0 - 6) (0 表示周日)
│ │ │ │ │
* * * * *

每个字段可以是一个具体的值、一个范围、一个列表,或者使用通配符 * 来表示“任意值”。

提示

在Airflow中,Cron表达式还可以包含第6个字段,用于表示秒(0-59)。这在需要更精确调度时非常有用。

Cron表达式的语法

以下是Cron表达式中常用的符号及其含义:

  • *:匹配任意值。例如,* 在分钟字段中表示“每分钟”。
  • ,:用于分隔多个值。例如,1,15 在分钟字段中表示“第1分钟和第15分钟”。
  • -:用于定义一个范围。例如,1-5 在星期字段中表示“周一到周五”。
  • /:用于定义步长。例如,*/10 在分钟字段中表示“每10分钟”。

示例

以下是一些常见的Cron表达式示例:

  • 0 * * * *:每小时的第0分钟执行(即每小时执行一次)。
  • 0 0 * * *:每天午夜执行。
  • 0 0 * * 1:每周一的午夜执行。
  • 0 0 1 * *:每月第一天的午夜执行。
  • */5 * * * *:每5分钟执行一次。

在Airflow中使用Cron表达式

在Airflow中,Cron表达式通常用于定义DAG的调度间隔。你可以在DAG的 schedule_interval 参数中指定Cron表达式。

示例:每小时执行一次任务

以下是一个简单的DAG示例,使用Cron表达式每小时执行一次任务:

python
from airflow import DAG
from airflow.operators.bash import BashOperator
from datetime import datetime

dag = DAG(
'hourly_task',
description='每小时执行一次的任务',
schedule_interval='0 * * * *',
start_date=datetime(2023, 1, 1),
catchup=False,
)

task = BashOperator(
task_id='print_time',
bash_command='date',
dag=dag,
)

在这个例子中,schedule_interval='0 * * * *' 表示任务将在每小时的第0分钟执行。

实际应用场景

场景1:每天凌晨执行数据备份

假设你需要在每天凌晨2点执行数据备份任务,可以使用以下Cron表达式:

plaintext
0 2 * * *

场景2:每周五下午5点发送周报

如果你需要在每周五下午5点发送周报,可以使用以下Cron表达式:

plaintext
0 17 * * 5

场景3:每15分钟检查一次系统状态

如果你需要每15分钟检查一次系统状态,可以使用以下Cron表达式:

plaintext
*/15 * * * *

总结

Cron表达式是Airflow中调度任务的重要工具。通过掌握Cron表达式的语法和使用方法,你可以灵活地定义任务的执行时间,满足各种调度需求。

备注

如果你对Cron表达式的语法还不熟悉,可以使用在线工具(如 crontab.guru)来验证和调试你的Cron表达式。

附加资源

练习

  1. 编写一个Cron表达式,表示“每周一到周五的上午9点到下午5点,每小时执行一次”。
  2. 在Airflow中创建一个DAG,使用Cron表达式每天中午12点执行一个简单的Bash命令。

通过练习,你将更好地理解Cron表达式的使用,并能够在实际项目中灵活应用。