본문 바로가기
App Programming/Apache Airflow

[Apache Airflow] Cron Schedule

by goatlab 2024. 6. 17.
728x90
반응형
SMALL

Cron Schedule

 

Cron Schedule은 다음과 같이 task가 실행되어야 하는 시간 (주기)을 정하기 위한 다섯개의 필드로 구성된 문자열이다.

 

{분} {시} {일} {월} {요일}

 

Airflow의 모든 DAG는 실행 주기를 결정해야 하며, 일반적으로 Cron Schedule을 활용하여 DAG이 실행되어야 할 주기를 명시한다.

 

특수 문자

 

특수 문자 설명
* 모든 값
- 범위 지정
, 여러 값 지정
/ 증가값 지정
L 마지막 값 (일, 요일에만 설정 가능)
※ 일에 L입력시 해당 월의 마지막 일 의미
※ 요일에 L 입력시 토요일 의미
# 몇 번째 요일인지 지정

 

Cron Schedule 설명 비고
15 2 * * * 매일 02시 15분  
0 * * * * 매시 정각  
0 0 1 * * 매월 1일 0시 0분  
10 1 * * 1 매주 월요일 1시 10분 0: 일요일, 1: 월요일, 2: 화요일, 3: 수요일, 4: 목요일, 5: 금요일, 6: 토요일
0 9-18 * * * 매일 9시부 터18시까지 정각 마다  
0 1 1,2,3 * * 매월 1일, 2일 3일만 1시에  
*/30 * * * 삼십분마다 (0분, 30분)  
10-59/30 * * * * 10분부터 삼십분마다 (10분, 40분)  
10 1 * * 1-5 평일만 01시 10분  
0 */2 * * * 2시간마다 (0시, 02시, 04시 …) 1-23/2: 1시부터 2시간마다
0 0 */2 * * 짝수일 0시 0분  
10 1 L * * 매월 마지막 일 01시 10분  
10 1 * * 6#3 매월 세번째 토요일 01시 10분  
None 주기 없음
(수작업으로만 실행되는 DAG)
 

 

Task 연결

 

DAG는 1개 이상의 Task를 가지며 일반적으로 Task는 선후행 관계를 가진다. 선후행 관계를 표시하는 방법에는 여러 방법이 존재하지만 가장 일반적인 방법은 >>와 << 기호를 이용한 방법이 있다.

 

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

with DAG(
    dag_id="dags_bash_operator",
    schedule="0 0 * * *",
    start_date=pendulum.datetime(2024, 6, 1, tz="Asia/Seoul"),
    catchup=False
) as dag:
    bash_t1 = BashOperator(
        task_id="bash_t1",
        bash_command="echo whoami",
    )

    bash_t2 = BashOperator(
        task_id="bash_t2",
        bash_command="echo $HOSTNAME",
    )

    bash_t1 >> bash_t2

from airflow import DAG
import pendulum
from airflow.operators.empty import EmptyOperator

with DAG(
        dag_id="dags_conn_test1",
        schedule=None,
        start_date=pendulum.datetime(2024, 6, 14, tz="Asia/Seoul"),
        catchup=False
) as dag:
    t1 = EmptyOperator(
        task_id="t1"
    )

    t2 = EmptyOperator(
        task_id="t2"
    )

    t3 = EmptyOperator(
        task_id="t3"
    )

    t4 = EmptyOperator(
        task_id="t4"
    )

    t5 = EmptyOperator(
        task_id="t5"
    )

    t6 = EmptyOperator(
        task_id="t6"
    )

    t7 = EmptyOperator(
        task_id="t7"
    )

    t8 = EmptyOperator(
        task_id="t8"
    )

    t1 >> t2
    t1 >> t3
    t3 >> t4
    t5 >> t4
    t4 >> t6
    t7 >> t6
    t6 >> t8

from airflow import DAG
import pendulum
from airflow.operators.empty import EmptyOperator

with DAG(
    dag_id="dags_conn_test2",
    schedule=None,
    start_date=pendulum.datetime(2024, 6, 14, tz="Asia/Seoul"),
    catchup=False
) as dag:
    
    t1 = EmptyOperator(
        task_id="t1"
    )

    t2 = EmptyOperator(
        task_id="t2"
    )

    t3 = EmptyOperator(
        task_id="t3"
    )

    t4 = EmptyOperator(
        task_id="t4"
    )

    t5 = EmptyOperator(
        task_id="t5"
    )

    t6 = EmptyOperator(
        task_id="t6"
    )

    t7 = EmptyOperator(
        task_id="t7"
    )

    t8 = EmptyOperator(
        task_id="t8"
    )

    t1 >> [t2, t3] >> t4
    t5 >> t4 
    [t4, t7] >> t6 >> t8

 

The scheduler does not appear to be running.

 

스케쥴러 실행이 안되는 경우 컨테이너를 조회하여 restart를 한다.

 

sudo docker container ps
sudo docker container restart {스케쥴러 컨테이너 ID}
728x90
반응형
LIST

'App Programming > Apache Airflow' 카테고리의 다른 글

[Apache Airflow] Python 오퍼레이터  (0) 2024.06.17
[Apache Airflow] Email 오퍼레이터  (0) 2024.06.17
[Apache Airflow] 개발 환경 구성  (0) 2024.06.14
[Apache Airflow] DAG 개발  (0) 2024.06.14
Apache Airflow  (0) 2024.06.14