强制气流以退出代码1终止

时间:2019-06-13 18:24:39

标签: python airflow directed-acyclic-graphs

我在Airflow中运行的某些任务有时由于各种原因而失败。我抓到的有些是新的,并不例外。我想获取退出代码1,以便接收此类失败的通知。

下面是我没有的错误示例,有没有办法让ValueError产生退出代码1?

[2019-06-13 12:56:13,630] {bash_operator.py:127} INFO - ValueError: year 43631 is out of range
[2019-06-13 12:56:13,870] {bash_operator.py:127} INFO - 2019-06-13 12:56:13,869 - ODL - INFO - Closing db connection
[2019-06-13 12:56:13,870] {bash_operator.py:127} INFO - 2019-06-13 12:56:13,870 - ODL - INFO - End
[2019-06-13 12:56:13,990] {bash_operator.py:131} INFO - Command exited with return code 0
[2019-06-13 12:56:17,556] {logging_mixin.py:95} INFO - [2019-06-13 12:56:17,555] {jobs.py:2562} INFO - Task exited with return code 0

我还有其他代码段,其中try块使用sys.exit(1)。但是,它没有引发,我是否需要引发此错误才能以1退出?

我尝试在try块中使用sys.exit(1)。

        if count==0:
            self._logger.error("Missing data, nothing was loaded")
            sys.exit(1)
        else:
            self._logger.info("Data is present, safe to load to prod!")

我希望得到以下信息以便通知失败。

2019-06-13 12:56:17,556] {logging_mixin.py:95} INFO - [2019-06-13 12:56:17,555] {jobs.py:2562} INFO - Task exited with return code 1

1 个答案:

答案 0 :(得分:2)

您似乎正在使用BashOperator来调用Python脚本。这意味着您将要使用set -e之类的方法来确保Bash在Python命令上命中非零代码并退出时会停止执行,并且使用相同的代码退出自身,有关更多详细信息,请参见What does set -e mean in a bash script? 。然后,这将使您的任务失败。