bash命令在气流中出现问题

时间:2020-03-14 19:06:46

标签: shell unix airflow airflow-operator

我的目标是运行一个本地python文件,在日志文件中附加一个日志,如果命令成功执行,则返回OK,如果命令失败,则返回NOK,再加上exit 1。 相同的代码是

RunDataException = BashOperator(
    task_id='run_data_exception',    
    bash_command= '`python ~/BoulderDash/DataProcessingPipeline/data_exception_pipeline.py 2>&1 | tee -a $(pwd)/BoulderDash_output.log && echo "OK" || { echo "NOK" && exit 1; }`',
    dag=main_dag,
    email_on_failure = True,
    email = 'abc@xyz.com',
    on_failure_callback = throw_error
    )

即使我从Airflow的日志中知道该命令实际上失败了,我也会收到OK消息。 有趣的是,如果我使用

enter`python ~/BoulderDash/DataProcessingPipeline/data_exception_pipeline.py 2>&1 $(pwd)/BoulderDash_output.log && echo "OK" || { echo "NOK" && exit 1; }`' 

在这里,我已删除| tee -a。然后,它会打印出预期的NOK,但是我写日志的目标被挫败了。请帮助我。

1 个答案:

答案 0 :(得分:0)

 bash_command= '`python ~/BoulderDash/DataProcessingPipeline/data_exception_pipeline.py 2> >(tee -a $(pwd)/BoulderDash_output.log) && echo "OK" || { echo "NOK" && exit 1; }`',

演示:

:>:> BoulderDash_output.log 
:>eval 1/0  2> >(tee -a BoulderDash_output.log) && echo "OK" || { echo "NOK"; }
NOK
:>bash: 1/0: No such file or directory

:>cat BoulderDash_output.log 
bash: 1/0: No such file or directory
:>