Неправильное планирование выражения cron воздушного потока - PullRequest
0 голосов
/ 11 июля 2020

'start_date': datetime (2020, 1, 1), time_zone = 'Asia / Singapore',

Если я хочу, чтобы отчет запускался каждую среду (SGT) 00:55 AM, я должен ввести '55 0 * * 3 ', но вместо этого я должен поставить в '55 0 * * 4 '. (Таким образом, время выполнения будет таким, как задумано, каждую среду 00:55 SGT)

Аналогичным образом, если я хочу, чтобы отчет запускался каждый месяц в первый день 3 AM SGT, я должен ввести 'schedule_interval =' 0 3 1 * * ', но затем он переносит его на ПОСЛЕДНИЙ день месяца 3:00 SGT.

Что происходит? Я понимаю, что время UT C на 8 часов раньше, но это все еще не объясняет этого, потому что они начинаются на 1 день ДО предполагаемого времени начала в SGT. Итак, для нижеприведенного (скопировано только в соответствующих частях) все среды выполнения DAG - среда, 00:55, SGT.

from airflow.operators.email_operator import EmailOperator

from airflow.contrib.hooks.ssh_hook import SSHHook
from airflow.contrib.operators.ssh_operator import SSHOperator

from datetime import datetime, timedelta
from airflow import DAG
import pendulum


default_args = {
    'owner': 'fs',  # Change to your group name
    'depends_on_past': False,
    'retries': 3,
    'cathup': True,
    'start_date': datetime(2020, 1, 1),

    'retry_delay': timedelta(minutes=30),


# every Wednesday 0:55, so ga_flattening done for BR as well for Sunday
dag = DAG(
    dag_id='SOMETHING',
    default_args=default_args,
    max_active_runs = 10,  # max 10 DAGS running
    schedule_interval= '55 0 * * 4',  #this will be wednesday 00:55 AM, not sure why
    time_zone='Asia/Singapore',
    catchup=True)

1 Ответ

0 голосов
/ 11 июля 2020

Взято из [документов] [1] ...

Вы можете указать часовой пояс, отличный от часового пояса по умолчанию, как часть аргументов DAG, как вы пытаетесь. Но может быть проще упростить ситуацию и вставить часовой пояс через start_date.

Совет предлагает добавить информацию о часовом поясе в аргумент start_date, построив Python datetime с pendulum часовой пояс.

import pendulum

local_tz = pendulum.timezone("Europe/Amsterdam")

default_args=dict(
    start_date=datetime(2016, 1, 1, tzinfo=local_tz),
    owner='Airflow'
)

dag = DAG('my_tz_dag', default_args=default_args)
op = DummyOperator(task_id='dummy', dag=dag)
print(dag.timezone) # <Timezone [Europe/Amsterdam]>

[1]: https://airflow.apache.org/docs/stable/timezone.html#: ~: text = The% 20default% 20time% 20zone% 20is% 20the% 20time% 20zone% 20defined% 20, например,% 60 % 60Европа% 2FАмстердам% 60% 60 ).

...