web-dev-qa-db-fra.com

Comment exécuter le fichier de script bash dans Airflow

J'ai un script bash qui crée un fichier (s'il n'existe pas) que je veux exécuter dans Airflow, mais quand j'essaye, il échoue. Comment puis-je faire cela?

#!/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

et voici comment je l'appelle dans 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
14
DougKruger

Du tutoriel, c'est OK:

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

Mais vous lui passez une commande sur plusieurs lignes

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

devrait être

create_command = "./scripts/create_file.sh "

De plus, vous devez également vous assurer que vous êtes dans le bon répertoire pour éviter les erreurs cryptiques. Faites-le comme ceci par exemple:

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))
15