Verwenden von systemd, um den Luftstrom in einer Conda-Umgebung zu betreiben

793
kadu

Ich habe einen Airflow-Server konfiguriert, der in einer Conda-Umgebung installiert ist, um geplante Automatisierungen auszuführen. Derzeit starte ich den Scheduler, die Worker und den Webserver direkt mit nohup, aber ich möchte systemd verwenden, um es robuster zu verwalten.

Ich habe jedoch Probleme beim Starten des Systems mit systemctl start. Ich fügte meiner .serviceDatei folgendes hinzu:

ExecStartPre=. /etc/profile ; /home/shared/miniconda2/bin/conda activate airflow ExecStart=/home/shared/miniconda2/envs/airflow/bin/airflow webserver --pid /run/airflow/webserver.pid 

(Wo shared/ist kein Benutzer, nur ein Ordner, /home/auf den alle Benutzer Zugriff haben)

ExecStartsetzt airflowvoraus, dass die Conda-Umgebung aktiviert ist, in der der Luftstrom tatsächlich installiert ist. Dazu fügte ich die beiden Befehle hinzu ExecStartPre: Der zweite Befehl aktiviert diese Umgebung. Wenn Sie diese Einstellung alleine ausführen CommandNotFoundError: Your shell has not been properly configured to use 'conda activate'., wird das erste Mal hinzugefügt, um sicherzustellen, dass /etc/profile.d/conda.shgeladen wird.

Dies schlägt jedoch immer noch fehl, scheinbar beim Ausführen des Gunicorn-Servers:

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 

(Zeitstempel wurden weggelassen, um die Lesbarkeit etwas zu verbessern)

Dies wirft eine Reihe von Fragen auf:

  • Was kann dazu führen, dass mein Dienst ausfällt?
  • Ist mein Setup unsinnig (systemd + conda + airflow)?
  • Wenn es unsinnig ist, gibt es einen besseren Weg, den Luftstrom robuster zu betreiben, als direkt zu starten? Ich interessierte mich besonders für die Optionen enableund restartOptionen, die systemd bietet.
3

0 Antworten auf die Frage