- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我有一个使用 LocalExecutor
运行 airflow 1.8.0 的 EC2 实例。根据文档,我预计以下两个命令之一会在守护进程模式下启动调度程序:
airflow scheduler --daemon --num_runs=20
或
Airflow 调度程序 --daemon=True --num_runs=5
但事实并非如此。第一个命令似乎可以正常工作,但它只是在返回终端之前返回以下输出,而不产生任何后台任务:
[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
第二个命令产生错误:
airflow scheduler: error: argument -D/--daemon: ignored explicit argument 'True'
这很奇怪,因为根据 docs --daemon=True
应该是 airflow scheduler
调用的有效参数。
再深入一点,我找到了 this StackOverflow post ,其中一个响应建议实现 systemd
,根据可用代码 this repo 将 Airflow 调度程序作为后台进程处理。 .
我对脚本的轻微编辑改编作为以下要点发布。我在 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 日,从那以后它每分钟都在回填,生成一个运行时间代码。但是,当我使用 systemd
将调度程序作为守护程序运行时,它完全安静,没有明显的错误源。
有什么想法吗?
最佳答案
文档可能已过时?
我通常按如下方式启动 Airflow
airflow kerberos -D
airflow scheduler -D
airflow webserver -D
这是 airflow webeserver --help
输出(来自版本 1.8):
-D, --daemon Daemonize instead of running in the foreground
注意那里不可能有 bool 标志。必须修复文档。
airflow scheduler -D
失败时的快速说明:
这包括在评论中,但在这里似乎值得一提。当您运行 Airflow 调度程序时,它将创建文件 $AIRFLOW_HOME/airflow-scheduler.pid
。如果您尝试重新运行 Airflow 调度程序守护进程,这几乎肯定会生成文件 $AIRFLOW_HOME/airflow-scheduler.err
它将告诉您 lockfile.AlreadyLocked:/home/ubuntu/airflow/airflow-scheduler.pid 已被锁定
。如果您的调度程序守护程序确实无法使用并且您发现自己需要重新启动,请执行以下命令:
sudo rm $AIRFLOW_HOME airflow-scheduler.err airflow-scheduler.pid
airflow scheduler -D
这让我的日程安排回到正轨。
关于python - 作为守护进程运行 Airflow 调度程序的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46476246/
一 点睛 线程可以设置为守护线程,ThreadGroup 也可以设置为守护 ThreadGroup,但是若将一个 ThreadGroup 设置为 deamon,也并不会影响线程的 daemon 属性,
我有一个 python 脚本需要在启动时作为守护进程运行。进程从 tty(和 pdb)分离,但代码不运行。 我已经将它缩小到一个最小的例子 import daemon from time import
reactjs isMounted API 的文档提到: You can use this method to guard asynchronous calls to setState() or fo
我正在开发一个需要嵌入 HTTP 服务器的守护进程。我正在尝试使用 BaseHTTPServer 来完成它,当我在前台运行它时,它工作正常,但是当我尝试将守护进程 fork 到后台时,它停止工作。我的
我正在尝试使用 Apache Commons Daemon 使用 Daemon 接口(interface)来守护我的应用程序。 Java 应用程序本身不执行任何操作,只是写入 stout。 我编译了j
我正在使用 Bootle Python Web Framework 在 Ubuntu 上开发网络应用程序。是否有任何有效的方法来守护启动默认 bottlepy 网络服务器的脚本? 谢谢。 UPD:现在
我一直使用 bluepill成功地守护简单的 Ruby 脚本。然而这一次,我有一个脚本,它也在加载 Rails 环境,因此我可以访问 Rails 应用程序及其各自模型的数据库连接。我使用的 bluep
我试图守护一些代码,但我遇到了一些麻烦。 如果我用 tklogger() 调用代码,它运行得很好。但是,如果我在守护程序上下文中调用它,我会得到以下跟踪信息: Traceback (most rece
我打算使用 systemd 将 celery 4.3.0 作为守护进程运行,但它给了我这个错误: 它会启动 worker 但会很快停止它们。但是,我可以通过键入以下命令手动运行工作人员: celery
我是一名优秀的程序员,十分优秀!