2016-10-20 2 views
5

У меня есть сценарий bash, который создает файл (если он не существует), который я хочу запустить в Airflow, но когда я пытаюсь его выполнить. Как мне это сделать?Как запустить файл сценария bash в Airflow

#!/bin/bash 
#create_file.sh 

file=filename.txt 

if [ ! -e "$file" ] ; then 
    touch "$file" 
fi 

if [ ! -w "$file" ] ; then 
    echo cannot write to $file 
    exit 1 
fi 

и вот как я называю его в Airflow:

create_command = """ 
./scripts/create_file.sh 
""" 
t1 = BashOperator(
     task_id= 'create_file', 
     bash_command=create_command, 
     dag=dag 
) 

lib/python2.7/site-packages/airflow/operators/bash_operator.py", line 83, in execute 
    raise AirflowException("Bash command failed") 
airflow.exceptions.AirflowException: Bash command failed 

ответ

5

В учебнике это нормально:

t2 = BashOperator(
    task_id='sleep', 
    bash_command='sleep 5', 
    retries=3, 
    dag=dag) 

Но вы передаете команду из нескольких строк в его

create_command = """ 
./scripts/create_file.sh 
""" 

должно быть

create_command = "./scripts/create_file.sh" 

Кроме того, вы также должны убедиться, что находитесь в правильном каталоге, чтобы избежать загадочных ошибок. Сделайте это, как это, например:

create_command = "./scripts/create_file.sh" 
if os.path.exists(create_command): 
    t1 = BashOperator(
     task_id= 'create_file', 
     bash_command=create_command, 
     dag=dag 
    ) 
else: 
    raise Exception("Cannot locate {}".format(create_command)) 
+0

добавить пробел после .sh: «./scripts/create_file.sh» –

+0

@KarolSudol Вы можете уточнить? –

+2

иногда вы можете получить сообщение об ошибке: 'Это не удается с шаблоном Jinja not found', чтобы преодолеть добавление' space' в конце скрипта, не уверен, что приводит в движение такое поведение: ref: https://cwiki.apache.org/confluence/display/AIRFLOW/Common + Pitfalls –

Смежные вопросы