防止气流 Bash操作员任务抛出"AirflowException: Bash command failed"



我有一个运行youtube-dl并且工作正常的气流任务。我正在使用 BashOperator 运行它:

YOUTUBE_DL_CMD = (
'/usr/local/bin/youtube-dl -w -i '
'--max-downloads {{ params.max_downloads }} '
'--write-info-json "{{ params.playlist_url }}" '
'-o "{{ params.output }}"'
)

但是,当它完成时,它会由于"错误的退出代码"而触发错误。因此将我的 DAG 运行标记为失败。

这是通过工具在被调用后退出的方式来区分的。这是有关我从气流日志中提取的错误的一些输出。请注意,--max-download limit reached, aborting在成功退出时从youtube-dl输出。

{{bash_operator.py:128}} INFO - --max-download limit reached, aborting.
{{bash_operator.py:132}} INFO - Command exited with return code 101
{{taskinstance.py:1047}} ERROR - Bash command failed
Traceback (most recent call last):
File "/usr/local/lib/python3.7/site-packages/airflow/models/taskinstance.py", line 922, in _run_raw_task
result = task_copy.execute(context=context)
File "/usr/local/lib/python3.7/site-packages/airflow/operators/bash_operator.py", line 136, in execute
raise AirflowException("Bash command failed")
airflow.exceptions.AirflowException: Bash command failed

有没有办法防止在气流中引发此错误?

  1. 退出代码 101 看起来像一个真正的问题 - https://github.com/ytdl-org/youtube-dl/blob/826dcff99cd0a44ec5fa94f0e0201f5115d097ef/youtube_dl/init.py#L467

  2. 您可以从 Airflow 中隐藏youtube_dl退出代码:

YOUTUBE_DL_CMD = (
'/usr/local/bin/youtube-dl -w -i '
'--max-downloads {{ params.max_downloads }} '
'--write-info-json "{{ params.playlist_url }}" '
'-o "{{ params.output }}" || true'
)

最新更新