2017-09-28 1 views
4

LocalExecutorを使用してエアフロー1.8.0を実行しているEC2インスタンスがあります。 airflow scheduler --daemon=True --num_runs=5エアフロースケジューラをデーモンプロセスとして実行する問題

airflow scheduler --daemon --num_runs=20

または

しかし、それはそうではありません。私は次の2つのコマンドのいずれかがデーモンモードでスケジューラを調達しているだろうと期待したドキュメントあたり。動作するように起こっているように最初のコマンドは、ようだが、それはただのバックグラウンドタスクを生成することなく、端末に戻る前に、次の出力を返します:

[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 

2番目のコマンドは、エラーを生成します。ある

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

奇妙なので、docs--daemon=Trueairflow schedulerコールの有効な引数にする必要があります。

少し深く掘り起こすとthis StackOverflow postになりました。回答の1つはthis repoとして利用可能なコードに従ってエアフロースケジューラをバックグラウンドプロセスとして処理するためのsystemdの実装を推奨しています。

私の軽く編集されたスクリプトの適応は、以下のGistとして掲載されます。私は呼んでそこから

:私はUbuntuの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のログが生成されていません。ここのどこかに問題はありますか?

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 

手動でairflow schedulerを実行すると、すべて正常に動作します。私のテストDAGは9月9日の開始日を持っているので、それ以来1分ごとにバックフィルを行い、実行中のティッカーを生成します。しかし、私がsystemdを使ってスケジューラをデーモンとして実行すると、それは完全に静かで、明らかなエラーの原因はありません。

どのような考えですか?

答えて

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が作成されます。気流スケジューラーデーモンプロセスを再実行しようとすると、これはほぼ確実に、ファイル$AIRFLOW_HOME/airflow-scheduler.errを生成します。そのファイルは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

良い提案ですが、これで修正されるわけではありません。 'airflow scheduler'をdaemonizeフラグなしで手動で実行したときに実行されるプロセスはありません。これ以外に何ができますか? '' airflow'はこれを生成します: '/ home/ubuntu/.local/bin/airflow' – Aaron

+0

私はあなたの経験が何であるか知りたいと思っています。 'airflow scheduler -D'を実行すると気流がきれいに印刷されますが、プロセスの代わりにターミナルプロンプトに戻ります。私はスケジューラがどこで実行されているかを示すPIDに与えられておらず、私のプロセスが実行されていません。あなたのために何が起こるのですか? – Aaron

+0

あなたのために開始していない場合は、$ AIRFLOW_HOME/airflow-scheduler.errをチェックしてください。なぜ起動しなかったのか(pidファイルが既に存在するか、バックエンドデータベースなどに接続できない可能性があります) )。はい、気流のバナーを印刷し、バックグラウンドで起動します。それでも実行できない場合は、 'strace -f airflow scheduler -D'を使って、なぜ失敗しているのかを知ることができます。 – Tagar

2

にsystemdを経由してタスクの開始について:

実行するこの方法は、最初は空であるとき、私はPATH変数に問題がありました。あなたは、ファイル/ etc /のsysconfig /気流に書き込むときには、次のとおりです。

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

あなたは文字通り書き込み:

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

したがって、変数PATHはそのbashユーティリティです/binが含まれていませんLocalExecutorはタスクの実行に使用します。

このファイルでは、なぜAIRFLOW_HOMEを指定していないのか分かりません。つまり、Airflowが設定ファイルを探しているディレクトリです。

+0

私はまだこれを試すチャンスはありませんでしたが、私はそれを打つことができたらすぐにあなたに戻ってきます。それが問題を解決すれば私はあなたの答えを間違いなく選ぶでしょう。 – Aaron

+0

これを解決するには、Tagarの答えが簡単な方法でした。しかし、あなたの提案をありがとう! – Aaron

関連する問題