我的目标是运行一个本地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,但是我写日志的目标被挫败了。请帮助我。
答案 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
:>