2016-10-20 6 views
5

エアフローで実行したいファイルが(存在しない場合)作成するbashスクリプトがありますが、試してみると失敗します。これはどうすればいいですか?エアフローでbashスクリプトファイルを実行する方法

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

と、ここで私は空気の流れでそれを呼んでいる方法は次のとおりです。

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

チュートリアルから、これはOKです:

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テンプレートが見つかりませんでした」というエラーが表示されることがあります。この動作を引き起こすものは不明です。ref:https://cwiki.apache.org/confluence/display/AIRFLOW/Common + Pitfalls –

関連する問題