2017-10-30 41 views
6

mam serwer WWW działała prawidłowo, a mój plik powietrza-scheduler.service uruchamia program planujący i uzna moje DAG itp Jednak zadania nie są uruchomione:Airflow Systemd scheduler nie działa

widzę komunikat o błędzie o/bin/sh

ERROR - failed to execute task Command 'exec bash -c run' 

mam plik sysconfig:

#!/bin/bash 
PATH=/opt/anaconda/anaconda3/envs/airflow_env/bin/airflow 
AIRFLOW_CONFIG=/mnt/var/airflow/airflow.cfg 
AIRFLOW_HOME=/mnt/var/airflow 

i mój plik powietrza-scheduler.service:

#!/bin/bash 
[Unit] 
Description=Airflow scheduler daemon 
After=network.target postgresql.service 
Wants=postgresql.service 

[Service] 
EnvironmentFile=/etc/sysconfig/airflow 
User=airflow 
Group=airflow 
Type=simple 
ExecStart=/opt/anaconda/anaconda3/envs/airflow_env/bin/airflow scheduler 
Restart=always 
RestartSec=5s 

[Install] 
WantedBy=multi-user.target 

Oto zapis journalctl który pokazuje błąd bash otrzymuję:

[2017-10-30 18:36:13,764] {base_executor.py:50} INFO - Adding to queue: airflow run user_presence_raw_etl transform_raw_user_presence 2017-10-30T14:00:00 --local -sd /mnt/var/airflow/dags/bin/user_p 
Oct 30 18:36:13 airflow[4742]: [2017-10-30 18:36:13,765] {jobs.py:1443} INFO - Heartbeating the executor 
Oct 30 18:36:13 airflow[4742]: [2017-10-30 18:36:13,783] {local_executor.py:45} INFO - LocalWorker running airflow run user_presence_raw_etl transform_raw_user_presence 2017-10-30T14:00:00 --local -sd /mnt/var/airflow/dags/bin/us 
Oct 30 18:36:13 airflow[4742]: /bin/sh: 1: exec: bash: not found 
Oct 30 18:36:13 airflow[4742]: [2017-10-30 18:36:13,865] {local_executor.py:52} **ERROR - failed to execute task Command 'exec bash -c 'airflow run** user_presence_raw_etl transform_raw_user_presence 2017-10-30T14:00:00 --local -sd /mnt/var/airf 
Oct 30 18:36:14 airflow[4742]: [2017-10-30 18:36:14,786] {jobs.py:1407} INFO - Heartbeating the process manager 
Oct 30 18:36:14 airflow[4742]: [2017-10-30 18:36:14,786] {dag_processing.py:559} INFO - Processor for /mnt/var/airflow/dags/bin/prod/hourly_agent_dag.py finished 
Oct 30 18:36:14 airflow[4742]: [2017-10-30 18:36:14,789] {dag_processing.py:627} INFO - Started a process (PID: 5425) to generate tasks for /mnt/var/airflow/dags/bin/prod/daily_agent_email_dag.py - logging into /mnt/var/airflow/l 
Oct 30 18:36:14 airflow[4742]: [2017-10-30 18:36:14,831] {jobs.py:1000} INFO - No tasks to send to the executor 
Oct 30 18:36:14 airflow[4742]: [2017-10-30 18:36:14,832] {jobs.py:1443} INFO - Heartbeating the executor 
Oct 30 18:36:14 airflow[4742]: [2017-10-30 18:36:14,833] {jobs.py:1195} INFO - Executor reports user_presence_raw_etl.transform_raw_user_presence execution_date=2017-10-30 14:00:00 as failed 

Odpowiedz

0

Pracownicy procesy zrodził przez LocalExecutor nie można uruchomić przepływ powietrza ponieważ nie jest dostępny w PATH. Konfigurujesz go tylko dla sysconfig. W przykładzie dostarczonym w repozytorium przepływu powietrza, airflow-scheduler.service, oczekują one, że przepływ powietrza będzie wykonywany dla użytkownika.

Moja sugestia to utworzenie virtualenv dla przepływu powietrza, zainstalowanie tam przepływu powietrza, a następnie aktywowanie go dla każdej powłoki, w której ma działać coś związanego z przepływem powietrza, np. pracownicy, harmonogram lub serwer WWW.

+0

Tak, mam środowisko (anakonda). Zazwyczaj uruchamiam przepływ powietrza, tworząc ekran, a następnie aktywuję źródło airflow_env, a następnie planer przepływu powietrza. Działa to w 100% przypadków. Mój plik .service wskazuje na środowisko wirtualne - być może nie jest aktywowany? Co mam zmienić? – trench

+0

Możesz zobaczyć w moim przykładzie, plik usługi wskazuje na plik sysconfig, który wskazuje na PATH =/opt/anaconda/anaconda3/envs/airflow_env/bin/airflow. To jest ścieżka anakonda, którą normalnie uruchamiam program planujący na ekranie. – trench

+0

Czy możesz spróbować dowiązać symbol '/ opt/anaconda/anaconda3/envs/airflow_env/bin/airflow' do katalogu, który istnieje w' $ PATH' np. '/ usr/local/bin'? Aby potwierdzić, że po uruchomieniu przepływu powietrza wszystko działa zgodnie z oczekiwaniami. Następnie możemy skupić się na tym, jak rozwiązać problem z definicją usługi. – s7anley

0

Wygląda na to, że zainstalowałeś przepływ powietrza jako użytkownik inny niż przepływ powietrza. Mam plik airflow-scheduler.service, który określa użytkownika, którego użyłem do zainstalowania przepływu powietrza, ponieważ w moim przypadku mghen.

[Unit] 
Description=Airflow scheduler daemon 
After=network.target postgresql.service mysql.service redis.service rabbitmq-server.service 
Wants=postgresql.service mysql.service redis.service rabbitmq-server.service 

[Service] 
EnvironmentFile=/etc/sysconfig/airflow 
User=mghen 
Group=mghen 
Type=simple 
ExecStart=/usr/local/bin/airflow scheduler 
Restart=always 
RestartSec=5s 

[Install] 
WantedBy=multi-user.target 

Walczyłem z podobnym problemem, ale nie widziałem tego samego komunikatu o błędzie. W każdym razie może pomóc zmiana User i Group. Ponieważ podczas przepływu powietrza określasz bezwzględną ścieżkę (ExecStart=/opt/anaconda/anaconda3/envs/airflow_env/bin/airflow scheduler), wydaje się, że zaczyna się on poprawnie od użytkownika airflow, ale tak naprawdę ten użytkownik airflow nie może faktycznie uruchomić programu, ponieważ inny użytkownik go zainstalował. Idk jak naprawić PATH Właśnie zmieniłem User i Group w moich plikach airflow-*.service.

Alternatywnie, może można zainstalować airflow jako użytkownik airflow więc jest ona dostępna w airflow użytkownika PATH.

Powiązane problemy