Проблема с командой bash в потоке воздуха - PullRequest
0 голосов
/ 14 марта 2020

Моя цель - запустить собственный файл python, добавить журнал в файл журнала, вернуть OK, если команда выполнена успешно, и вернуть NOK плюс выход 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 я узнаю, что команда действительно не выполнена. Интересно, если я использую

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

Здесь я удалил | ти-а. Затем он печатает ожидаемый NOK, но тогда моя цель записи в журнал потерпела поражение. Пожалуйста, помогите мне с этим.

1 Ответ

0 голосов
/ 15 марта 2020
 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
:>


...