Configuré un servidor Airflow instalado dentro de un entorno conda para ejecutar algunas automatizaciones programadas. Actualmente, lanzo el planificador, los trabajadores y el servidor web directamente usando nohup
, pero me gustaría usar systemd para administrarlo de manera más robusta.
Sin embargo, tengo problemas para iniciar el sistema con systemctl start
. Agregué a mi .service
archivo lo siguiente:
ExecStartPre=. /etc/profile ; /home/shared/miniconda2/bin/conda activate airflow
ExecStart=/home/shared/miniconda2/envs/airflow/bin/airflow webserver --pid /run/airflow/webserver.pid
(donde shared/
no hay un usuario, solo una carpeta dentro /home/
de la cual todos los usuarios tienen acceso)
ExecStart
requiere que se airflow
active el entorno conda en el que el flujo de aire está realmente instalado. Para hacer esto, agregué los dos comandos vistos en ExecStartPre
: el segundo realmente activa este entorno. Ejecutar esto solo regresa CommandNotFoundError: Your shell has not been properly configured to use 'conda activate'.
, así que agregué el primero para asegurarme de que /etc/profile.d/conda.sh
esté cargado.
Sin embargo, esto todavía falla, aparentemente al intentar ejecutar el servidor Gunicorn:
Running the Gunicorn Server with:
Workers: 4 sync
Host: 0.0.0.0:8080
Timeout: 120
Logfiles: - -
=================================================================
Traceback (most recent call last):
File "/home/shared/miniconda2/envs/airflow/bin/airflow", line 28, in <module>
args.func(args)
File "/home/shared/miniconda2/envs/airflow/lib/python2.7/site-packages/airflow/bin/cli.py", line 844, in webserver
gunicorn_master_proc = subprocess.Popen(run_args)
File "/home/shared/miniconda2/envs/airflow/lib/python2.7/subprocess.py", line 390, in __init__
errread, errwrite)
File "/home/shared/miniconda2/envs/airflow/lib/python2.7/subprocess.py", line 1025, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
(se omiten las marcas de tiempo para mejorar un poco la legibilidad)
Esto plantea una serie de preguntas:
- ¿Qué puede estar causando que mi servicio falle?
- ¿Mi configuración no tiene sentido (systemd + conda + flujo de aire)?
- Si no tiene sentido, ¿hay una mejor manera de ejecutar el flujo de aire de manera más sólida que lanzarlo directamente? Estaba particularmente interesado en las opciones
enable
yrestart
que ofrece systemd.