인프런 영문 브랜드 로고
인프런 영문 브랜드 로고

인프런 커뮤니티 질문&답변

cluelin님의 프로필 이미지
cluelin

작성한 질문수

Airflow 마스터 클래스

Bash Operator & 외부 쉘파일 수행하기

Bash Operator & 외부 쉘파일 수행하기 강의 질문

작성

·

59

·

수정됨

0

Bash Operator & 외부 쉘파일 수행하기

강좌에서 보여주신내용을 따라하던중 쉘스크립트를 파라미터없이 작성했는데

 

파라미터가 없는경우 airflow에서 위치를 못찾고

jinja2.exceptions.TemplateNotFound: /opt/airflow/plugins/shell/select.sh

 

에러를 발생시키는데

파라미터의 유무로 경로를 찾고/못찾고가 차이나는 원인이 무엇인지 궁금해서 질문드립니다.

 

답변 2

0

김현진님의 프로필 이미지
김현진
지식공유자

안녕하세요 clulin 님!

Base operator를 사용할 때 bash_command 파라미터의 값이 .sh 로 끝나는 경우 스크립트 자체를 Jinja 템플릿으로 해석하려고 시도합니다.

그런데 조건이 있습니다. 쉘 파일을 dags 디렉토리 아래에 두어야 한다는 조건이 있습니다.

dags 아래 여러 디렉토리를 계층으로 두더라도 꼭 dags 디렉토리 아래에 쉘 파일이 있어야 인식이 가능합니다.

에러를 안나게 하는 방법은 2가지인데,

1) 쉘 파일을 dags 디렉토리 아래에 두고, bash_command 파라미터를 dags 아래 상대 경로로 작성해주세요.

예를 들어 dags/shells/select.sh 이렇게 두었다면 bash_command를 아래처럼 작성해보세요.

bash_command=shells/select.sh

이 방법은 select.sh 파일 안에 {{ data_inverval_end }} 와 같이 Template 변수가 작성되어 있을 때 적용할 수 있습니다.

 

2) bash_command 파라미터 작성시 띄어쓰기를 하나 포함해주는 방법이 있습니다.

그럼 .sh 로 끝나지 않고 띄어쓰기가 하나 있으므로 Jinja 템플릿으로 해석하려는 시도를 하지 않습니다.

쉘 파일 안에 Template 변수가 없고 단순히 그냥 실행만 하고자 하면 이 방법을 사용하면 됩니다.

 

이에 대한 설명은 Airflow 가이드 문서 참고해보세요 ^^

image.png

 

https://airflow.apache.org/docs/apache-airflow/stable/howto/operator/bash.html#jinja-template-not-found

 

답변이 되었을까요?

궁금한건 언제든 물어보세요 ^^

cluelin님의 프로필 이미지
cluelin
질문자

상세한 답변감사드립니다!

0

안녕하세요, 인프런 AI 인턴입니다. cluelin님.

jinja2.exceptions.TemplateNotFound 에러는 파이썬 스크립트에서 파일 또는 디렉토리를 찾지 못했을 때 발생하는 문제입니다. 이와 관련해서 몇 가지 확인해보셔야 할 사항을 안내드립니다.

  1. 디렉토리 및 파일 경로 확인: 지정된 경로 /opt/airflow/plugins/shell/select.sh에 실제로 파일이 존재하는지 확인하세요. 쉘 파일이 올바르게 위치에 있어야 합니다. WSL 또는 Docker 환경에서 경로가 올바르게 마운트되어 있는지 확인하세요.

  2. Mount 된 패스 확인: Airflow를 Docker에서 사용 중이라면, docker-compose.yaml 파일을 확인하여 볼륨 마운트가 제대로 설정되어 있는지 확인하셔야 합니다. 경로를 잘못 설정하면 컨테이너 내부에서 파일을 찾을 수 없습니다.

  3. BashOperator 설정 확인: BashOperator에서 bash_command 파라미터에 적힌 경로가 올바른지 확인해야 합니다. 경로에 오타가 있는 경우도 동일한 에러가 발생할 수 있습니다.

BashOperator가 경로를 찾지 못하는 문제가 일반적으로 경로 설정 오류에서 발생하므로 위의 사항들을 하나씩 점검하시면 도움이 될 것입니다.

관련해서 다음과 같은 질문들이 도움이 될 수 있습니다:
- Task 실행관련 질문입니다.
- bashoperator에 외부 쉘파일 수행하기

이 외에도 여러 명확한 사례가 있으니 참고하시길 바라며, 문제가 계속되신다면 현재 설정을 보다 자세히 알 수 있게 추가적인 정보를 제공하여 질문을 남겨주시면 도움이 될 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다. 현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

cluelin님의 프로필 이미지
cluelin

작성한 질문수

질문하기