2017-09-28 8 views
4

LocalExecutor을 사용하여 공기 흐름 1.8.0을 실행하는 EC2 인스턴스가 있습니다. 워드 프로세서 당 I는 다음과 같은 두 가지 명령 중 하나가 데몬 모드에서 스케줄러를 제기 할 것으로 예상했을 것이다 :공기 흐름 스케줄러를 데몬 프로세스로 실행하는 문제

airflow scheduler --daemon --num_runs=20

또는

airflow scheduler --daemon=True --num_runs=5

하지만 그건 사실이 아니다. 이 일 것 같은 첫 번째 명령은 보이지만, 그냥 어떤 배경 작업 생산하지 않고 터미널에 반환하기 전에 다음과 같은 결과가 출력됩니다 :

airflow scheduler: error: argument -D/--daemon: ignored explicit argument 'True' 

입니다 :

[2017-09-28 18:15:02,794] {__init__.py:57} INFO - Using executor LocalExecutor 
[2017-09-28 18:15:03,064] {driver.py:120} INFO - Generating grammar tables from /usr/lib/python3.5/lib2to3/Grammar.txt 
[2017-09-28 18:15:03,203] {driver.py:120} INFO - Generating grammar tables from /usr/lib/python3.5/lib2to3/PatternGrammar.txt 

이 두 번째 명령은 오류가 발생을 이상한 이유는 docs--daemon=Trueairflow scheduler 호출에 유효한 인수 여야하기 때문입니다. 좀 더 깊이 파고

응답 중 하나가 this repo으로 사용할 수있는 코드에 따라 백그라운드 프로세스로 공기 흐름 스케줄러를 처리하기위한 systemd의 구현을 권장 this StackOverflow post에 걸렸다.

가볍게 편집 한 스크립트의 수정본은 다음 GIST로 게시됩니다. 우분투 16.04.3와 바닐라 m4.xlarge의 EC2 인스턴스를 사용하고 있습니다 : 거기에서

내가 전화 :

sudo systemctl enable airflow-scheduler 
sudo systemctl start airflow-scheduler 

과 아무 반응이 없습니다. 이 인스턴스에서 훨씬 더 복잡한 DAG가 실행되는 동안 I am using this dummy case 간단한 테스트를 작성하여 스케줄러가 계획대로 작동 할 때 알려주는 수신기 역할을합니다.

디버그에는 journalctl -f을 사용하고 있습니다. 다음은 스케줄러 프로세스의 몇 가지 출력입니다. 명백한 문제는 없지만 내 작업이 실행되지 않고 오류를 확대하는 데 도움이되는 테스트 DAG에 대한 로그가 생성되지 않습니다. 여기 어딘가에서 문제가 있습니까? 내가 airflow scheduler을 실행하면

Sep 28 18:39:30 ip-172-31-15-209 airflow[20603]: [2017-09-28 18:39:30,965] {dag_processing.py:627} INFO - Started a process (PID: 21822) to generate tasks for /home/ubuntu/airflow/dags/scheduler_test_dag.py - logging into /home/ubuntu/airflow/logs/scheduler/2017-09-28/scheduler_test_dag.py.log 
Sep 28 18:39:31 ip-172-31-15-209 airflow[20603]: [2017-09-28 18:39:31,016] {jobs.py:1002} INFO - No tasks to send to the executor 
Sep 28 18:39:31 ip-172-31-15-209 airflow[20603]: [2017-09-28 18:39:31,020] {jobs.py:1440} INFO - Heartbeating the executor 
Sep 28 18:39:32 ip-172-31-15-209 airflow[20603]: [2017-09-28 18:39:32,022] {jobs.py:1404} INFO - Heartbeating the process manager 
Sep 28 18:39:32 ip-172-31-15-209 airflow[20603]: [2017-09-28 18:39:32,023] {jobs.py:1440} INFO - Heartbeating the executor 
Sep 28 18:39:33 ip-172-31-15-209 airflow[20603]: [2017-09-28 18:39:33,024] {jobs.py:1404} INFO - Heartbeating the process manager 
Sep 28 18:39:33 ip-172-31-15-209 airflow[20603]: [2017-09-28 18:39:33,025] {dag_processing.py:559} INFO - Processor for /home/ubuntu/airflow/dags/capone_dash_dag.py finished 
Sep 28 18:39:33 ip-172-31-15-209 airflow[20603]: [2017-09-28 18:39:33,026] {dag_processing.py:559} INFO - Processor for /home/ubuntu/airflow/dags/scheduler_test_dag.py finished 

수동이 모두 잘 작동합니다. 내 테스트 DAG의 시작일은 9 월 9 일이므로 그 이후로 매분마다 백필을 계속 작성하여 실행 시간 기록표를 작성합니다. 그러나 systemd을 사용하여 스케쥴러를 데몬 (deamon)으로 실행할 때, 명백한 오류의 출처가 없어 완전히 조용합니다.

의견이 있으십니까?

답변

3

문서가 작성되었을 수 있습니다.가 가능 부울 플래그가없는

-D, --daemon Daemonize instead of running in the foreground

주의 사항 :

airflow kerberos -D 
airflow scheduler -D 
airflow webserver -D 

을 다음과 같은

나는 일반적으로 여기 (버전 1.8) airflow webeserver --help 출력의 공기 흐름을 시작합니다. 문서를 수정해야합니다.

이이 의견에 포함되어 있지만, 여기에 언급 할 가치처럼 보인다 : 경우 airflow scheduler -D

빠른 메모가 실패합니다. 기류 스케줄러를 실행하면 파일 $AIRFLOW_HOME/airflow-scheduler.pid이 생성됩니다. 기류 스케쥴러 데몬 프로세스를 다시 실행하려고 시도하면 파일이 거의 생성되어 lockfile.AlreadyLocked: /home/ubuntu/airflow/airflow-scheduler.pid is already locked이라고 알려줍니다. 당신의 스케줄러 데몬이위원회에서 참으로 당신은 자신을 다시 할 필요 찾을 경우 다음 명령을 실행할 수 있습니다 :

sudo rm $AIRFLOW_HOME airflow-scheduler.err airflow-scheduler.pid airflow scheduler -D 

다시 궤도에 내 스케줄러를 가지고이. 태스크 정보

+0

좋습니다.하지만이 문제는 해결되지 않습니다. daemonize 플래그없이'airflow scheduler'를 수동으로 실행할 때처럼 프로세스가 실행되고 있지 않습니다. 이게 뭐야? 'which airflow'는 이것을 생성합니다 :'/ home/우분투/.local/bin/airflow' – Aaron

+0

당신이 경험 한 것이 무엇인지 알고 싶습니다. 'airflow scheduler -D'를 실행하면 airflow pretty print가 튀어 나오지만 프로세스가 실행되는 대신 터미널 프롬프트로 돌아갑니다. 나는 스케쥴러가 어디서 돌아가고 있는지 알려주는 PID가 주어지지 않았고, 내 프로세스가 실행되고 있지도 않다. 너 한테 무슨 일이 일어난거야? – Aaron

+0

시작되지 않은 경우 $ AIRFLOW_HOME/airflow-scheduler.err을 확인하십시오. 시작되지 않은 오류가 있어야합니다 (pid 파일이 이미 존재하거나 백엔드 데이터베이스 또는 다른 어떤 곳에 연결할 수 없기 때문일 수 있습니다).). 예, 기류 배너를 인쇄 한 다음 백그라운드에서 시작합니다. 그래도 실행시킬 수 없다면'strace -f airflow scheduler -D'를 사용해보십시오. 왜 실패했는지 확인할 수 있습니다. – Tagar

2

는 systemd를 통해 시작 :이 방법은 처음에 비어 실행할 때

내가 PATH 변수에 문제가 있었다. 이 파일에 쓸 때 즉,/등/SYSCONFIG/공기 흐름 :

PATH=/home/ubuntu/bin:/home/ubuntu/.local/bin:$PATH 

는 말 그대로 쓰기 :

PATH=/home/ubuntu/bin:/home/ubuntu/.local/bin 

따라서, 변수 PATH/bin을 포함하지 않는 bash 유틸리티입니다 LocalExecutor는 작업을 실행하는 데 사용됩니다.

그래서이 파일에서 AIRFLOW_HOME을 지정하지 않은 이유를 알 수 없습니다. 즉, Airflow가 구성 파일을 찾고있는 디렉토리입니다.

+0

아직 시도 할 기회가 없었지만 최대한 빨리 기회를 포착 할 수있게되었습니다. 문제가 해결되면 나는 분명히 답을 고를 것입니다. – Aaron

+0

타가 (Tagar)의 대답은이를 해결하는 더 쉬운 방법이었습니다. 그래도 제안 해 주셔서 감사합니다! – Aaron