如何 运行 Bluemix 上的后台进程?
How to run background processes on Bluemix?
我正在尝试将一个非常简单的 python 程序 运行 作为 CloudFoundry 应用程序在 IBM Bluemix 上的后台进程。
我把它放在 Github repo 里了。
有一个单行请求文件,因为我发现它比 setup.py 更容易,python buildpack 需要它 运行.
我的完整用例是我有一个用 Django 编写的 API,我需要一个 MQTT 客户端,除此之外,它还会 运行 从代理收集数据(Watson IOT I想想)。
我已经尝试 运行 在同一个 CF 应用程序中使用一个 2 行 Procfile,如下所示:
web: gunicorn -e DJANGO_SETTINGS_MODULE=conf.dev conf.wsgi --workers 2
worker: python time.py
但是第二个过程被忽略了。
我也在当前配置中尝试过,但是 Procfile 只包含第二行,它告诉我找不到启动命令。
现在,使用 Manifest 中的启动命令和 true
中的 no-route
,它要么没有通过健康检查,要么只是在开始步骤等待,直到我收到此错误:
2016-07-22T13:10:36.671+0200
[LGR/null]
err
WebsocketListener.Start: Error connecting to a doppler server
2016-07-22T13:10:36.677+0200
[LGR/null]
err
proxy: error connecting to 159.8.128.238:8081: dial tcp 159.8.128.238:8081: getsockopt: connection refused
那么,有没有办法在 Bluemix 中 运行 后台任务,如果可能的话作为独立应用程序(以便更轻松地扩展和更新)?
编辑:现在它可以工作了,尽管我除了在我的 Python 脚本中格式化字符串之外没有更改任何东西,尽管应用程序几乎每分钟都会崩溃
Removing crash for app with id 3978a475-4dc6-495f-9662-a6fd562dc28a
问题的简短回答:将 no-route
参数设置为 true
的单独应用
好的,我显然已经让它完全正常工作了。
我不确定我做了什么,但问题可能出在我要求一个 32M 的实例,而最小值似乎是 64M,所以 Bluemix/CF 不太高兴按照我的要求崩溃了。
我在以前的尝试中使用了 128M,但我想我当时没有输入 no-route: true
我将这种方法用于 运行 两个独立的 Web 应用程序和工作实例。但是,我仍然被失败的健康检查绊倒了。
因此,对于工作人员,我建议禁用路由并另外禁用健康检查。
以下清单适用于 运行ning Django,通过 gunicorn for web 和 celery for workers。
我的manifest.yml
---
applications:
- name: myapp
host: myapp
domain: eu-de.mybluemix.net
memory: 128M
command: bash ./run_web.sh
- name: myapp-workers
memory: 128M
no-route: true
health-check-type: none
command: bash ./run_worker.sh
run_web.sh
和 run_worker.sh
shell 脚本包含 运行 组件的命令,对于 Web 实例,我将 migration 和 collecstatic 命令添加到 运行脚本。
我正在尝试将一个非常简单的 python 程序 运行 作为 CloudFoundry 应用程序在 IBM Bluemix 上的后台进程。
我把它放在 Github repo 里了。 有一个单行请求文件,因为我发现它比 setup.py 更容易,python buildpack 需要它 运行.
我的完整用例是我有一个用 Django 编写的 API,我需要一个 MQTT 客户端,除此之外,它还会 运行 从代理收集数据(Watson IOT I想想)。
我已经尝试 运行 在同一个 CF 应用程序中使用一个 2 行 Procfile,如下所示:
web: gunicorn -e DJANGO_SETTINGS_MODULE=conf.dev conf.wsgi --workers 2
worker: python time.py
但是第二个过程被忽略了。
我也在当前配置中尝试过,但是 Procfile 只包含第二行,它告诉我找不到启动命令。
现在,使用 Manifest 中的启动命令和 true
中的 no-route
,它要么没有通过健康检查,要么只是在开始步骤等待,直到我收到此错误:
2016-07-22T13:10:36.671+0200
[LGR/null]
err
WebsocketListener.Start: Error connecting to a doppler server
2016-07-22T13:10:36.677+0200
[LGR/null]
err
proxy: error connecting to 159.8.128.238:8081: dial tcp 159.8.128.238:8081: getsockopt: connection refused
那么,有没有办法在 Bluemix 中 运行 后台任务,如果可能的话作为独立应用程序(以便更轻松地扩展和更新)?
编辑:现在它可以工作了,尽管我除了在我的 Python 脚本中格式化字符串之外没有更改任何东西,尽管应用程序几乎每分钟都会崩溃
Removing crash for app with id 3978a475-4dc6-495f-9662-a6fd562dc28a
问题的简短回答:将 no-route
参数设置为 true
好的,我显然已经让它完全正常工作了。
我不确定我做了什么,但问题可能出在我要求一个 32M 的实例,而最小值似乎是 64M,所以 Bluemix/CF 不太高兴按照我的要求崩溃了。
我在以前的尝试中使用了 128M,但我想我当时没有输入 no-route: true
我将这种方法用于 运行 两个独立的 Web 应用程序和工作实例。但是,我仍然被失败的健康检查绊倒了。
因此,对于工作人员,我建议禁用路由并另外禁用健康检查。
以下清单适用于 运行ning Django,通过 gunicorn for web 和 celery for workers。
我的manifest.yml
---
applications:
- name: myapp
host: myapp
domain: eu-de.mybluemix.net
memory: 128M
command: bash ./run_web.sh
- name: myapp-workers
memory: 128M
no-route: true
health-check-type: none
command: bash ./run_worker.sh
run_web.sh
和 run_worker.sh
shell 脚本包含 运行 组件的命令,对于 Web 实例,我将 migration 和 collecstatic 命令添加到 运行脚本。