【发布时间】:2020-11-13 16:18:45
【问题描述】:
我正在尝试在Docker 上使用Apache Airflow 运行bash 脚本
这是我正在运行的 bash 脚本,
#!/bin/bash
rootdir=/home/anti/Documents/logistics/ariflowtest
crondir="$rootdir/cron/$(date "+%Y%m%d/%H")"
mkdir -p "$crondir"
/usr/bin/python3 "$rootdir/her.py" >> "$crondir/cron.log" 2>&1
当我运行Airflow DAG 时,它会显示这个error
Running command: ./aus.sh
[2020-11-12 08:15:14,821] {{bash_operator.py:122}} INFO - Output:
[2020-11-12 08:15:14,823] {{bash_operator.py:126}} INFO - /tmp/airflowtmp_856j2oz/task_ausg7zzejtp: line 1: ./aus.sh: No such file or directory
我尝试传递脚本的相对路径,但没有成功
这是我的 dag 代码:
from airflow.models import DAG
from airflow.utils.dates import days_ago
from airflow.operators.python_operator import PythonOperator
from airflow.operators.bash_operator import BashOperator
from airflow.operators.dummy_operator import DummyOperator
import os
args={
'owner' : 'anti',
'start_date':days_ago(1)
}
dag = DAG(dag_id='sn_logistics2',default_args=args,schedule_interval='*/5 * * * *')
create_command_dpd = "./home/anti/Documents/logistics/ariflowtest/dpd.sh "
create_command_aus = "./home/anti/Documents/logistics/ariflowtest/aus.sh "
with dag:
dummy_operator = DummyOperator(task_id='mothertrigger',retries=3)
task_dpd=BashOperator(
task_id='task_dpd',
bash_command="/dpd.sh ",
#bash_command = create_command_dpd,
xcom_push=True,
dag=dag
)
task_aus=BashOperator(
task_id='task_aus',
bash_command="/aus.sh ",
#bash_command = create_command_aus,
xcom_push=True,
dag=dag
)
dummy_operator >> task_dpd
dummy_operator >> task_aus
我检查了我的 dag 文件夹是否已挂载:
sudo docker inspect -f '{{ .Mounts }}' 1e6c9974a9f3
输出
[{bind /home/anti/Documents/dags /usr/local/airflow/dags rw true rprivate}]
我尝试运行的脚本文件和 docker compose 文件位于两个不同的位置
脚本文件位于:
/home/anti/Documents/logistics/ariflowtest
docker-compose 在:
/home/anti/Documents
我确保该文件夹已正确安装在 docker-compose 文件中
version: '3.7'
services:
postgres:
image: postgres:9.6
environment:
- POSTGRES_USER=airflow
- POSTGRES_PASSWORD=airflow
- POSTGRES_DB=airflow
logging:
options:
max-size: 10m
max-file: "3"
webserver:
image: puckel/docker-airflow:1.10.9
restart: always
depends_on:
- postgres
environment:
- LOAD_EX=y
- EXECUTOR=Local
logging:
options:
max-size: 10m
max-file: "3"
volumes:
- ./dags:/usr/local/airflow/dags
- ./scripts:/usr/local/airflow/scripts
# - ./plugins:/usr/local/airflow/plugins
ports:
- "8080:8080"
command: webserver
healthcheck:
test: ["CMD-SHELL", "[ -f /usr/local/airflow/airflow-webserver.pid ]"]
interval: 30s
timeout: 30s
retries: 3
【问题讨论】:
标签: python docker docker-compose airflow