如何使用气流运行现有的Shell脚本?

时间:2019-12-13 11:19:42

标签: airflow airflow-scheduler

我想使用气流运行一些现有的bash脚本,而不修改脚本本身中的代码。是否可以在任务中不提及脚本中的shell命令?

3 个答案:

答案 0 :(得分:0)

不确定是否理解了您的问题,但可以将Shell命令加载到  通过管理>>变量菜单将变量作为json文件。 然后在您的dag中读取变量并将其作为参数传递给BashOperator。

气流变量的更多细节: https://www.applydatascience.com/airflow/airflow-variables/

变量文件示例: https://github.com/tuanavu/airflow-tutorial/blob/v0.7/examples/intro-example/dags/config/example_variables.json

如何读取变量: https://github.com/tuanavu/airflow-tutorial/blob/v0.7/examples/intro-example/dags/example_variables.py

希望这篇文章对您有所帮助。

答案 1 :(得分:0)

只要Shell脚本与Airflow Worker在同一台计算机上运行,​​您就可以使用Bash Operator调用Shell脚本,如下所示:

t2 = BashOperator(
    task_id='bash_example',

    # Just call the script
    bash_command="/home/batcher/test.sh ",
    dag=dag)

答案 2 :(得分:0)

您必须将您的 shell 脚本所在的本地文件夹与 worker 进行“链接”,这意味着您需要在 docker-compose 文件的 worker 部分添加卷..

所以我在 worker 设置下添加了 volume 行,worker 现在查看本地机器上的这个文件夹:

airflow-worker:
    <<: *airflow-common
    command: celery worker
    healthcheck:
      test:
        - "CMD-SHELL"
        - 'celery --app airflow.executors.celery_executor.app inspect ping -d "celery@$${HOSTNAME}"'
      interval: 10s
      timeout: 10s
      retries: 5
    restart: always
    volumes:
      - /LOCAL_MACHINE_FOLDER/WHERE_SHELL_SCRIPT_IS:/folder_in_root_folder_of_worker