如何在Bluemix上运行后台进程?

时间:2016-07-22 11:25:41

标签: python ibm-cloud cloudfoundry

我试图让一个非常简单的python程序作为CloudFoundry应用程序在IBM Bluemix上作为后台进程运行。

我把它放在Github repo中。 这是一个单行req文件,因为我发现它比setup.py更容易,并且python buildpack需要它运行。

我的完整用例是我有一个用Django编写的API,我需要一个MQTT客户端,除了它之外还需要运行来从代理收集数据(我认为这与Watson IOT有关)。

我试图在同一个CF应用程序中使用2行Procfile运行,如下所示:

web: gunicorn -e DJANGO_SETTINGS_MODULE=conf.dev conf.wsgi --workers 2
worker: python time.py

但第二个过程被忽略了。

我也尝试过当前配置,但是只包含第二行的Procfile,它告诉我它无法找到启动命令。

现在,使用清单中的启动命令和no-route true,或者它没有通过运行状况检查,或者它只是在开始步骤等待,直到我收到此错误:

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

2 个答案:

答案 0 :(得分:1)

问题的简短回答:将no-route参数设置为true的单独应用

好的,所以我显然已经让它完全运作了。

我不确定我做了什么,但问题可能来自于我要求32M实例并且最小值似乎是64M,所以Bluemix / CF对我的需求并不满意坠毁。

我在较旧的尝试中使用128M,但我认为我当时没有放no-route: true

答案 1 :(得分:0)

我使用该方法为Web和工作者实例运行两个单独的应用程序。但是,我仍在绊倒失败的健康检查。

因此,对于工作人员,我建议禁用路由,并禁用健康检查。

以下清单适用于通过gunicorn为工作人员运行Django for web和芹菜。

我的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实例,我将迁移和collecstatic命令添加到运行脚本。