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=True
はairflow scheduler
コールの有効な引数にする必要があります。
少し深く掘り起こすとthis StackOverflow postになりました。回答の1つはthis repoとして利用可能なコードに従ってエアフロースケジューラをバックグラウンドプロセスとして処理するためのsystemd
の実装を推奨しています。
私の軽く編集されたスクリプトの適応は、以下のGistとして掲載されます。私は呼んでそこから
- /etc/sysconfig/airflow
- /user/lib/systemd/system/airflow-scheduler.service
- /etc/tmpfiles.d/airflow.conf
:私は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
を使ってスケジューラをデーモンとして実行すると、それは完全に静かで、明らかなエラーの原因はありません。
どのような考えですか?
良い提案ですが、これで修正されるわけではありません。 'airflow scheduler'をdaemonizeフラグなしで手動で実行したときに実行されるプロセスはありません。これ以外に何ができますか? '' airflow'はこれを生成します: '/ home/ubuntu/.local/bin/airflow' – Aaron
私はあなたの経験が何であるか知りたいと思っています。 'airflow scheduler -D'を実行すると気流がきれいに印刷されますが、プロセスの代わりにターミナルプロンプトに戻ります。私はスケジューラがどこで実行されているかを示すPIDに与えられておらず、私のプロセスが実行されていません。あなたのために何が起こるのですか? – Aaron
あなたのために開始していない場合は、$ AIRFLOW_HOME/airflow-scheduler.errをチェックしてください。なぜ起動しなかったのか(pidファイルが既に存在するか、バックエンドデータベースなどに接続できない可能性があります) )。はい、気流のバナーを印刷し、バックグラウンドで起動します。それでも実行できない場合は、 'strace -f airflow scheduler -D'を使って、なぜ失敗しているのかを知ることができます。 – Tagar