我有一个用例,将已编译的Native C可执行文件作为微服务部署在PCF上:
编译后的可执行文件的调用方式如下: “ mycbinary输入文件输出文件” 并在手术后终止。因此,微服务不是LRP。 在PCF看来,这可能是一个任务,但它并不依赖于其他微服务的存在。 它必须是独立的微服务,但不能长期运行。
请问如何用PCF实现此用例,即我有什么可能性? 当二进制文件完成工作后,微服务会终止,直到再次需要它为止。
为了测试我可以做什么的可行性,我尝试将一些已编译的C代码推送到PCF-DEV。 我正在使用cf push,因为这是我对PCF上独立应用程序的理解
cf push HelloServiceAgain -c'./helloworld'-b https://github.com/cloudfoundry/binary-buildpack.git -u进程--no-route
推送失败并显示以下消息:
正在等待应用启动... 开始失败
提示:有关详细信息,请使用'cf.exe日志HelloService --recent'
在日志文件中有以下条目: OUT进程已崩溃,其类型为:“ web”
然后我推送了另一个需要参数的命令。这开始没有问题,但是日志文件中的消息相同
cf push HelloServiceGCC -c'gcc -o ./hellogcc ./hello1.c'-b https://github.com/cloudfoundry/binary-buildpack.git -u进程--no-route
请问我还有以下其他问题:
1)消息“进程已崩溃,类型:“ web”是否为错误?”并且为什么多次调用该命令?
2)成功的第二次推送应该创建一个编译的hellogcc
可执行文件,我希望在同一根目录中看到该可执行文件。在哪里创建输出文件,如何从本地文件系统访问输出文件?
很抱歉问了这么多问题,但我是PCF业务的新手。
答案 0 :(得分:0)
因此,微服务不是LRP。在PCF看来,这可能是一个任务,但它并不依赖于其他微服务的存在。它必须是独立的微服务,但不能长期运行。
这绝对是一项任务。不用依赖其他服务就可以了。任务只是一个简单的过程,它在有限的时间内运行,为成功则退出0,否则为错误退出。
cf push HelloServiceAgain -c'./helloworld'-b https://github.com/cloudfoundry/binary-buildpack.git -u进程--no-route
我建议使用以下微小变化:cf push HelloServiceAgain -c 'sleep 5000' -b binary_buildpack -u process --no-route
。
这将...
sleep
,仅用于通过运行状况检查。这样做的目的是使您的应用程序上载和登台。我们将命令设置为sleep
,因为我们只需要暂存和启动应用程序即可(这是一种确保暂存发生的解决方法,您至少必须在此时运行一次才能触发暂存)。应用启动后,只需运行cf stop
并停止应用即可。由于您所要做的只是任务,因此不需要该应用程序即可继续运行。如果您更新应用程序,则确实需要再次执行此过程,因为这将保留您的更改。
这时,您可以cf run-task
并执行程序。例如:cf run-task app-name './helloworld'
。
希望有帮助!