我正在使用 CF CLI 编写部署到 Cloud Foundry 的脚本,并且希望捕获与正在启动的新应用程序相关的日志以进行分析。这通常需要两个不同的命令,cf push [appname] -f [manifest.yml]
并且cf logs [appname] > [appname].log
。问题是,在推送命令进行到一半之前,应用程序还不存在,并且cf logs
需要现有的应用程序才能成功运行。
我认为我的脚本会读取输出流以查找表明服务已创建的行,然后在第二个线程中cf push
触发命令来捕获这些日志。cf logs
我正在寻找一种机制,通过它我可以检查第二个进程的输出cf push
并触发第二个进程。
两个问题
- 这可能吗?
- 这种东西应该叫什么名字,这样我才能找到一些关于合理方法的文档?
答案1
鉴于cf push
序列仅在启动服务后完成(或者我想是在尝试中失败),您可以将一个管道链接在一起(用英语):“启动 cf 推送并查找“成功”消息;如果看到它,运行 cf 日志”。
在 shell 语法中,这将是(使用示例命令):
cf push [appname] -f [manifest.yml] | grep -q "service has been created" && \
cf logs [appname] > [appname].log
这使用 shell 的管道cf push
将 的输出与grep
命令连接起来。 grep 命令(-q 表示安静)搜索成功消息(将我使用的字符串替换为cf push
实际生成的字符串)。如果 grep 找到该消息,它将退出并返回成功代码;这将允许&&
操作员运行cf logs
命令。如果 grep 不成功,&&
操作员将不是运行cf logs
命令。我\
在&&
只是为了很好地包装代码之后使用了反斜杠;命令可以全部在一行上。
如需更多阅读,请参阅shell 的控制和重定向运算符是什么?