Принудительное завершение потока воздуха с кодом выхода 1 - PullRequest
4 голосов
/ 13 июня 2019

Некоторые задачи, которые я запускаю в 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?

Я пытался использовать sys.exit (1) в моих блоках try.

        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 Ответ

2 голосов
/ 14 июня 2019

Похоже, вы используете BashOperator для вызова скрипта Python.Это означает, что вы захотите использовать что-то вроде set -e, чтобы гарантировать, что Bash останавливает выполнение при попадании ненулевого кода в вашу команду Python и завершает себя с тем же кодом, см. Что означает значение -e вскрипт bash? для более подробной информации.Тогда это должно провалиться, как и следовало ожидать.

...