如何 运行 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.shrun_worker.sh shell 脚本包含 运行 组件的命令,对于 Web 实例,我将 migration 和 collecstatic 命令添加到 运行脚本。