Configurei um servidor Airflow instalado em um ambiente conda para executar algumas automações programadas. Atualmente, inicio o agendador, os funcionários e o servidor da Web diretamente usando nohup
, mas gostaria de usar o systemd para gerenciá-lo de forma mais eficiente.
No entanto, estou com problemas para iniciar o sistema com systemctl start
. Eu adicionei ao meu arquivo .service
o seguinte:
ExecStartPre=. /etc/profile ; /home/shared/miniconda2/bin/conda activate airflow
ExecStart=/home/shared/miniconda2/envs/airflow/bin/airflow webserver --pid /run/airflow/webserver.pid
(onde shared/
não é um usuário, apenas uma pasta dentro de /home/
à qual todos os usuários têm acesso)
ExecStart
requer o ambiente airflow
conda no qual o fluxo de ar está realmente instalado para ser ativado. Para fazer isso, adicionei os dois comandos vistos em ExecStartPre
: o segundo realmente ativa esse ambiente. Executar isso sozinho retorna CommandNotFoundError: Your shell has not been properly configured to use 'conda activate'.
, então adicionei o primeiro para garantir que /etc/profile.d/conda.sh
seja carregado.
No entanto, isso ainda falha, aparentemente ao tentar executar o Gunicorn Server:
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
(timestamps omitidos para melhorar um pouco a legibilidade)
Isso gera várias perguntas:
enable
e restart
que o systemd oferece.