No tienes acceso a esta clase

¡Continúa aprendiendo! Únete y comienza a potenciar tu carrera

No se trata de lo que quieres comprar, sino de quién quieres ser. Invierte en tu educación con el precio especial

Antes: $249

Currency
$209

Paga en 4 cuotas sin intereses

Paga en 4 cuotas sin intereses
Suscríbete

Termina en:

12 Días
17 Hrs
54 Min
16 Seg

Bash Operator

12/29
Recursos

Aportes 22

Preguntas 6

Ordenar por:

¿Quieres ver más aportes, preguntas y respuestas de la comunidad?

🎮 Bash Operator

Ademas de lo mencionado en clase este se puede ejecutar cualquier comando de bash, por tanto podemos ejemplo bajar un fichero con wget o curl y luego retornar la data filtrado con grep o awk o en si ejecutar cualquier script de bash para ello solo hace falta que lo tengas dentro de la carpeta dags, (Lo unico es que script bash no pude ser ejecutado con source file.sh sino que debemos darle permisos de ejecución y llamarlo asi ./file.sh)

from airflow import DAG
from airflow.decorators import dag
from airflow.operators.bash import BashOperator
from datetime import datetime

with DAG(dag_id='primer_dag_bash', schedule_interval='@once', start_date=datetime(2022, 7, 1)) as dag:
    t1 = BashOperator(task_id='primer_task_bash',
                      bash_command='echo "Hola mundo"')

Les comparto el código de la clase:

from airflow import DAG
from airflow.decorators import dag
from airflow.operators.bash import BashOperator

from datetime import datetime
with DAG(
dag_id="bashoperator",
description="Utilizando BASH operator",
start_date=datetime(2022, 10, 31)
) as dag:

t1 = BashOperator(task_id="hello_with_bash",
bash_command="echo 'hello bash operator'")
t1

Hola, les comparto imagen del log

![](https://static.platzi.com/media/user_upload/image-d3526766-197d-4f2e-be63-86dd97c9528d.jpg)![](https://static.platzi.com/media/user_upload/image-cd46d427-c87f-4bb5-ae95-4060952432da.jpg)

Este curso si que me ha traido felicidades!

![](https://static.platzi.com/media/user_upload/image-35c79ec3-d120-4a67-9da0-61cc90fcc641.jpg)
No he podido quitar los DAGs que vienen como ejemplo en el Airflow, desactivé la opción desde el docker\_composer.yml AIRFLOW\_\_CORE\_\_LOAD\_EXAMPLES: 'false' pero siguen saliendo. Ayuda!
\[2024-03-24, 01:18:47 UTC] {taskinstance.py:1979} INFO - Dependencies all met for dep\_context=non-requeueable deps ti=\<TaskInstance: bashoperator.hello\_with\_bash manual\_\_2024-03-24T01:18:43.924062+00:00 \[queued]> \[2024-03-24, 01:18:47 UTC] {taskinstance.py:1979} INFO - Dependencies all met for dep\_context=requeueable deps ti=\<TaskInstance: bashoperator.hello\_with\_bash manual\_\_2024-03-24T01:18:43.924062+00:00 \[queued]> \[2024-03-24, 01:18:47 UTC] {taskinstance.py:2193} INFO - Starting attempt 1 of 1 \[2024-03-24, 01:18:47 UTC] {taskinstance.py:2217} INFO - Executing \<Task(BashOperator): hello\_with\_bash> on 2024-03-24 01:18:43.924062+00:00 \[2024-03-24, 01:18:47 UTC] {standard\_task\_runner.py:60} INFO - Started process 2075 to run task \[2024-03-24, 01:18:47 UTC] {standard\_task\_runner.py:87} INFO - Running: \['\*\*\*', 'tasks', 'run', 'bashoperator', 'hello\_with\_bash', 'manual\_\_2024-03-24T01:18:43.924062+00:00', '--job-id', '3', '--raw', '--subdir', 'DAGS\_FOLDER/1-bashoperator.py', '--cfg-path', '/tmp/tmpzk\_i2e5w'] \[2024-03-24, 01:18:47 UTC] {standard\_task\_runner.py:88} INFO - Job 3: Subtask hello\_with\_bash \[2024-03-24, 01:18:47 UTC] {task\_command.py:423} INFO - Running \<TaskInstance: bashoperator.hello\_with\_bash manual\_\_2024-03-24T01:18:43.924062+00:00 \[running]> on host 233392a8204a \[2024-03-24, 01:18:47 UTC] {taskinstance.py:2513} INFO - Exporting env vars: AIRFLOW\_CTX\_DAG\_OWNER='\*\*\*' AIRFLOW\_CTX\_DAG\_ID='bashoperator' AIRFLOW\_CTX\_TASK\_ID='hello\_with\_bash' AIRFLOW\_CTX\_EXECUTION\_DATE='2024-03-24T01:18:43.924062+00:00' AIRFLOW\_CTX\_TRY\_NUMBER='1' AIRFLOW\_CTX\_DAG\_RUN\_ID='manual\_\_2024-03-24T01:18:43.924062+00:00' \[2024-03-24, 01:18:47 UTC] {subprocess.py:63} INFO - Tmp dir root location: /tmp \[2024-03-24, 01:18:47 UTC] {subprocess.py:75} INFO - Running command: \['/usr/bin/bash', '-c', "echo 'Hello gente soy gianmarco'"] \[2024-03-24, 01:18:47 UTC] {subprocess.py:86} INFO - Output: \[2024-03-24, 01:18:47 UTC] {subprocess.py:93} INFO - Hello gente soy gianmarco \[2024-03-24, 01:18:47 UTC] {subprocess.py:97} INFO - Command exited with return code 0 \[2024-03-24, 01:18:48 UTC] {taskinstance.py:1149} INFO - Marking task as SUCCESS. dag\_id=bashoperator, task\_id=hello\_with\_bash, execution\_date=20240324T011843, start\_date=20240324T011847, end\_date=20240324T011848 \[2024-03-24, 01:18:48 UTC] {local\_task\_job\_runner.py:234} INFO - Task exited with return code 0 \[2024-03-24, 01:18:48 UTC] {taskinstance.py:3312} INFO - 0 downstream tasks scheduled from follow-on schedule check

Acá esta:

Ha cambiado un poco la interfaz, pero no mucho

No entiendo como poner imagenes, por lo que adjunto el script creado:

from datetime import datetime
from airflow.operators.bash import BashOperator
from airflow import DAG


with DAG(dag_id="bashoperator",
    description="Utilizando bash Operator",
    start_date=datetime(2022, 11, 1)    
) as dag:
    t1= BashOperator(
        task_id="hello_with_bash",
        bash_command="echo 'Hi Platzi people from bash operator'"
    )
    t1
El **BashOperator** en Apache Airflow permite ejecutar comandos de Bash en un flujo de trabajo. Es útil para realizar tareas como mover archivos, ejecutar scripts de shell, o interactuar con herramientas del sistema operativo desde un DAG. ### **Estructura Básica del BashOperator** Aquí tienes un ejemplo básico de cómo usar el `BashOperator`: from airflow import DAG from airflow.operators.bash import BashOperator from datetime import datetime \# Definir el DAG with DAG( dag\_id="bash\_operator\_example", description="Ejemplo de uso del BashOperator", start\_date=datetime(2024, 11, 28), # Fecha en el pasado schedule\_interval="@daily", # Se ejecuta diariamente catchup=False, # No ejecuta tareas pendientes de fechas pasadas ) as dag: \# Definir una tarea usando BashOperator t1 = BashOperator( task\_id="print\_date", bash\_command="date", # Comando de Bash que imprime la fecha actual ) \# Otra tarea para ejecutar un script t2 = BashOperator( task\_id="run\_script", bash\_command="echo 'Ejecutando mi script'; ./mi\_script.sh", # Comando Bash con script ) \# Definir dependencias entre tareas t1 >> t2 ### **Parámetros principales** El `BashOperator` tiene varios parámetros que puedes configurar: **ParámetroDescripción**`task_id`Identificador único de la tarea.`bash_command`Comando de Bash que se ejecutará. Puede incluir múltiples líneas.`env`Diccionario para configurar variables de entorno que se usarán durante la ejecución del comando.`cwd`Cambia el directorio de trabajo donde se ejecutará el comando.`execution_timeout`Tiempo máximo permitido para que el comando termine antes de ser interrumpido. ### **Ejemplo con variables de entorno** Puedes pasar variables de entorno al comando de Bash: t3 = BashOperator( task\_id="custom\_environment", bash\_command="echo 'El usuario actual es: $USER'", env={"USER": "airflow\_user"} # Establece la variable USER ) ### **Logs de la ejecución** Airflow registra los logs de cada ejecución, por lo que puedes verificar los resultados de tu comando en el log del operador. Para ver los logs: 1. Ve al **Airflow UI**. 2. Selecciona el DAG y luego la tarea. 3. Haz clic en **View Log**. ### **Errores comunes** 1. **Permisos insuficientes**: Asegúrate de que los scripts o comandos tengan los permisos necesarios. 2. **Rutas incorrectas**: Si usas rutas relativas, verifica que el directorio de trabajo sea el correcto. 3. **Dependencias del sistema**: Si tu comando requiere herramientas externas, verifica que estén instaladas en el entorno donde se ejecuta Airflow. ### **Avanzado: Plantillas Jinja** El `bash_command` soporta **plantillas Jinja**, lo que permite usar variables dinámicas como fechas de ejecución: t4 = BashOperator( task\_id="templated\_command", bash\_command="echo 'Fecha de ejecución: {{ ds }}'", # `ds` es la fecha de ejecución ) Este ejemplo imprime la fecha de ejecución del DAG (por ejemplo, `2024-11-28`). ¡Con estos ejemplos deberías poder usar el `BashOperator` con confianza! 😊
No estoy pudiendo correr ningun DAG, tengo la versión 2.3.3 corriendo dockerizada con este compose <https://airflow.apache.org/docs/apache-airflow/2.3.3/docker-compose.yaml> Al parecer cuando ejecuta no puede escribir los logs, por eso falla y por eso no puedo ver el error desde la consola web. ![](https://static.platzi.com/media/user_upload/image-d0db4915-35bd-413b-8079-0e37eb9dd6fa.jpg) Probe creando las carpetas dags y logs antes de correr el compose, probe dejando que las cree el airflow-init por su cuenta, mismo resultado. Fallan todos los DAGs inlcuso los de ejemplo que vienen en airflow. Probe con la version 2.9.0 y tengo los mismos problemas, salvo que as tasks no fallan inmediatamente pero no terminan nunca, pero en los logs del contenedor veo los mismos errores. Estoy corriendo ubuntu 22.04 docker 26.1.1 compose 2.27.0
![](https://static.platzi.com/media/user_upload/image-ab0d5d3f-7d13-4096-973c-789286863fd1.jpg)

muy chevere !

Como coloco mi imagen?
Ya me quedo mi DAG