web-dev-qa-db-ja.com

Bashオペレーターエラー:そのようなファイルまたはディレクトリはairflowにありません

私はAirflowの初心者で、BashOperatorと格闘しています。 dag.pyでbashオペレーターを使用してシェルスクリプトにアクセスしたい。

私はチェックしました: Airflowでbashスクリプトファイルを実行する方法 および BashOperatorはbashファイルを実行しませんApache Airflow

bashオペレーターを介してシェルスクリプトにアクセスする方法について。

これは私がやったことです:

 cmd = "./myfirstdag/dag/lib/script.sh "

        t_1 = BashOperator(
            task_id='start',
            bash_command=cmd
        )

私のレシピを実行して気流をチェックすると、以下のエラーが発生しました:

[2018-11-01 10:44:05,078] {bash_operator.py:77} INFO - /tmp/airflowtmp7VmPci/startUDmFWW: line 1: ./myfirstdag/dag/lib/script.sh: No such file or directory
[2018-11-01 10:44:05,082] {bash_operator.py:80} INFO - Command exited with return code 127
[2018-11-01 10:44:05,083] {models.py:1361} ERROR - Bash command failed

なぜこれが起こっているのかわかりません。任意の助けいただければ幸いです。

よろしくお願いします!

編集注:私が提供したパスではなく、一部のairflow tmpの場所を検索していると思います。しかし、どうすれば正しいパスを検索できますか。

7
Marvin

Dockerバージョンを実行しているユーザー向け。

私はこれと同じ問題を抱えていましたが、問題を実現するのにしばらく時間がかかりました。Dockerでは動作が異なる場合があります。 DAGを実行すると、tmpファイルが移動します。dockerにエアフローがない場合、これは同じマシン上にあります。私のdockerバージョンでは、別のコンテナーに移動して実行します。もちろん、実行するとスクリプトファイルはオンになりません。

タスクログを注意深く確認すると、タスクが実行される前にこれが発生することがわかります。これは、airflow-dockerの設定によっても異なる場合があります。

1
Lexius

以下を試してください。 bashファイルへの完全なファイルパスが必要です。

cmd = "/home/notebook/work/myfirstdag/dag/lib/script.sh "

t_1 = BashOperator(
    task_id='start',
    bash_command=cmd
)
1
kaxil

定義したパスは確かですか?

cmd = "./myfirstdag/dag/lib/script.sh "

という見出しは、コマンドを実行するパスに相対的であることを意味します。

これやってみませんか?

cmd = "find . -type f"
0
Bsquare ℬℬ

これを実行してみてください:

path = "/home/notebook/work/myfirstdag/dag/lib/script.sh"
copy_script_cmd = 'cp ' + path + ' .;'
execute_cmd = './script.sh'

t_1 = BashOperator(
    task_id='start',
    bash_command=copy_script_cmd + execute_cmd
)
0
SSR